Forum: Ruby on Rails undefined method keys for ActiveRecord::Relation when executing to_json

Fdb488647484e40f785dde7134afc6d1?d=identicon&s=25 Heinz Strunk (cojones)
on 2011-10-05 17:00
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
5f94b9b346c2aa648a80bc259978e5bc?d=identicon&s=25 Colin Law (Guest)
on 2011-10-05 17:16
(Received via mailing list)
On 5 October 2011 16:00, Heinz Strunk <lists@ruby-forum.com> 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 Groups "Ruby
on Rails: Talk" group.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
> For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>



--
gplus.to/clanlaw
Fdb488647484e40f785dde7134afc6d1?d=identicon&s=25 Heinz Strunk (cojones)
on 2011-10-05 17:31
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?
Fdb488647484e40f785dde7134afc6d1?d=identicon&s=25 Heinz Strunk (cojones)
on 2011-10-05 17:32
Ehm, yes.

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


Thanks a lot for the hint, Colin!
5f94b9b346c2aa648a80bc259978e5bc?d=identicon&s=25 Colin Law (Guest)
on 2011-10-05 17:39
(Received via mailing list)
On 5 October 2011 16:32, Heinz Strunk <lists@ruby-forum.com> 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
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.