Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enumeration #2418

Open
exocode opened this issue Apr 15, 2021 · 0 comments
Open

Enumeration #2418

exocode opened this issue Apr 15, 2021 · 0 comments

Comments

@exocode
Copy link

exocode commented Apr 15, 2021

Expected behavior vs actual behavior

How to iterate through an array with relations?
And how to pass through "columns"-method (example below) one serializer deeper?

ANY help appreciated (thank you)

Steps to reproduce

class Category
  has_many :categories # self referencing
  attribute_reader :name
  #  nested arrays with Categories grouped in chunks of pieces
  def columns # how can I use a serializer on these array of arrays. Somehow this method is not able to serialize. The only way it works is the 'approach_one', but it will respond with ALL available attributes, where I only need name (and some others
     [
        [Category.find(1), Category.find(2), Category.find(2)]
        [Category.find(4), Category.find(5), Category.find(6)]
     ]
  end
end
class ColumnSerializer 
  attribute :grouped_children, key: :approach_one, serializer: CategoryMenuColumnsSerializer # outputs everything of "colums"-method. But does not use Serializer in any way
  # another approach
  attribute :grouped_children do |serializer|
    serializer.grouped_children.each do |column|
      CategoryMenuColumnsSerializer.new(column)
    end
  end
end

class CategoryMenuColumnsSerializer < ActiveModel::Serializer
  attribute :name, key: :title
end

This is what I get:

            "menu": {
                 "columns": [
                    [
                        {
                            "id": 1,
                            "name": "Baby Badebedarf",
                            "created_at": "2021-04-04T17:03:25.976Z",
                            "updated_at": "2021-04-04T17:03:25.995Z",
                            "ancestry": "537",
                            "ancestry_depth": 1,
                            "gid": null,
                            "slug": "baby-badebedarf",
                            "children_count": 2,
                            "products_count": 0,
                            "main_products_count": 0
                        },
                        {
                            "id": 2,
                            "name": "Babytransport",
                            "created_at": "2021-04-04T17:03:26.193Z",
                            "updated_at": "2021-04-04T17:03:26.221Z",
                            "ancestry": "537",
                            "ancestry_depth": 1,
                            "gid": null,
                            "slug": "babytransport",
                            "children_count": 3,
                            "products_count": 0,
                            "main_products_count": 0
                        }
                    ],

Expected result

            menu: {
                columns: [                # MUST be an Array attribute gives me only Hash (curly braces), 
                    {
                        size: 3,
                        links: [             # Links must be an Array of Hashes
                            {
                                title: 'Power Tools',
                                url: '',
                                children: [
                                    { title: 'Engravers', url: '' },
                                    { title: 'Drills', url: '' },
                                    { title: 'Wrenches', url: '' },
                                ],
                            },
                            { title: 'Workbenches', url: '' },
                            { title: 'Presses', url: '' },
                        ],
                    },
                    {
                        size: 3,
                        links: [
                            {
                                title: 'Hand Tools',
                                url: '',
                                children: [
                                    { title: 'Screwdrivers', url: '' },
                                    { title: 'Handsaws', url: '' },
         
                                ],
                            },
                            {
                                title: 'Garden Equipment',
                                url: '',
                                children: [
                                    { title: 'Motor Pumps', url: '' },
                                    { title: 'Chainsaws', url: '' },
                                ],
                            },
                        ],
                    },
               ]
         }
    }

Environment

ActiveModelSerializers Version (commit ref if not on tag):

Output of ruby -e "puts RUBY_DESCRIPTION":

ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin20] OS Type & Version:
`Darwin 20.3.0 Darwin Kernel Version 20.3.0: Thu Jan 21 00:07:06 PST 2021; root:xnu-7195.81.3~1/RELEASE_X86_64 x86_64

Integrated application and version (e.g., Rails, Grape, etc):

Rails "6.1.3.1"
Backtrace
(e.g., provide any applicable backtraces from your application)

Additonal helpful information
(e.g., Gemfile.lock, configurations, PR containing a failing test, git bisect results)


gem 'active_model_serializers', '~> 0.10.0'
  active_model_serializers (~> 0.10.0)
      active_model_serializers (0.10.12)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant