undefined method keys for ActiveRecord::Relation when executing to_json

Hello,

I just ran into a strange error. In console I typed in following: ruby-1.9.2-p290 :120 > User.first.to_json   User Load (0.7ms) SELECT `users`.* FROM `users` LIMIT 1 => "{\"avatar_id\":10,\"email\":\"peter@example.org\",\"firstname\":\"Peter\",\"lastname\":\"L\",\"user_role_id\":11}"

and when I try that with an avatar: ruby-1.9.2-p290 :121 > Avatar.first.to_json   Avatar Load (0.5ms) SELECT `avatars`.* FROM `avatars` LIMIT 1 NoMethodError: Attribute Load (0.8ms) SELECT `attributes`.* FROM `attributes` WHERE `attributes`.`avatar_id` = 10 undefined method `keys' for #<ActiveRecord::Relation:0x007fb6a3e69518>

Why on earth can I convert the user model to json but not the avatar?!

Any suggestions appreciated! Hans

Hello,

I just ran into a strange error. In console I typed in following: ruby-1.9.2-p290 :120 > User.first.to_json User Load (0.7ms) SELECT `users`.* FROM `users` LIMIT 1 => "{\"avatar_id\":10,\"email\":\"peter@example.org\",\"firstname\":\"Peter\",\"lastname\":\"L\",\"user_role_id\":11}"

and when I try that with an avatar: ruby-1.9.2-p290 :121 > Avatar.first.to_json Avatar Load (0.5ms) SELECT `avatars`.* FROM `avatars` LIMIT 1 NoMethodError: Attribute Load (0.8ms) SELECT `attributes`.* FROM `attributes` WHERE `attributes`.`avatar_id` = 10 undefined method `keys' for #<ActiveRecord::Relation:0x007fb6a3e69518>

Can you show us the start of avatar.rb and attribute.rb?

Also I just wonder whether attribute is a reserved word in RoR.

Colin

Oh, yeah. You might be right with the reserved word!

avatar.rb: class Avatar < ActiveRecord::Base   attr_accessible :name, :level, :current_xp, :overall_xp, :gender_cd   as_enum :gender, :female => 0, :male => 1   has_one :user   has_many :attributes ...

attribute.rb: class Attribute < ActiveRecord::Base   belongs_to :attribute_type   belongs_to :avatar

Do I need to rename the whole model now?

Ehm, yes.

Changing it to has_many :avatar_attributes, :class_name => 'Attribute' did the trick.

Thanks a lot for the hint, Colin!

Ehm, yes.

Changing it to has_many :avatar_attributes, :class_name => 'Attribute' did the trick.

Thanks a lot for the hint, Colin!

Glad to be of help.

Colin