Created
May 2, 2012 13:54
-
-
Save cadwallion/2576678 to your computer and use it in GitHub Desktop.
ActiveModel::Serializer fails w/ Array of Hashes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # This is a problem with an array of Hash objects wherein each Hash object | |
| # needs to be manipulated rather than all keys serialized. | |
| # | |
| # @bracket.class # => Bracket | |
| # @bracket.seats.class # => Array | |
| # @bracket.seats[0].class # => Hash | |
| # @bracket.seats[0].keys # => ['position','round', 'won'] | |
| class BracketSerializer < ActiveModel::Serializer | |
| attribute :final_size, key: :size | |
| attributes :type, :title | |
| # this is necessary in order to do any filtration on a per-seat basis, | |
| # even though seats is an array of Hashes, not an array of Seat objects | |
| has_many :seats, serializer: SeatSerializer | |
| # Returns an array of hashes in binary tree format | |
| # | |
| # Because Hash does not respond to `read_attribute_for_serialization`, | |
| # ActiveModel::Serializer explodes trying to serialize the has_many | |
| def seats | |
| bracket.to_tree.to_a | |
| end | |
| end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| undefined method `read_attribute_for_serialization' for {:position=>256, :round=>9}:Hash | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:493:in `block in attributes' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:492:in `each' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:492:in `attributes' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:397:in `serializable_hash' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:191:in `block in serialize' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:190:in `map' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:190:in `serialize' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:464:in `include!' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:410:in `block in include_associations!' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:403:in `each' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:403:in `include_associations!' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:398:in `serializable_hash' | |
| MY_PROJECT_DIR/bundler/gems/active_model_serializers-a2d73faa6335/lib/active_model/serializer.rb:387:in `as_json' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # The serializer used to handle data filtration on each Hash | |
| # in the Bracket seat array | |
| class SeatSerializer < ActiveModel::Serializer | |
| attributes :position, :round | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello,
I have the same problem. Did you find the mistake eventually?