Undefined method keys for ActiveRecord::Relation when executing to_json


#1

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”:“removed_email_address@domain.invalid”,“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


#2

On 5 October 2011 16:00, Heinz S. removed_email_address@domain.invalid wrote:

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

You received this message because you are subscribed to the Google G. “Ruby
on Rails: Talk” group.
To post to this group, send email to removed_email_address@domain.invalid.
To unsubscribe from this group, send email to
removed_email_address@domain.invalid.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.


gplus.to/clanlaw


#3

Ehm, yes.

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

Thanks a lot for the hint, Colin!


#4

On 5 October 2011 16:32, Heinz S. removed_email_address@domain.invalid wrote:

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


gplus.to/clanlaw


#5

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?