开发者

undefined method for ActiveRecord::Relation

User model

class User < ActiveRecord::Base
  has_many :medicalhistory 
end

Mdedicalhistory model

class Medicalhistory < ActiveRecord::Base
  belongs_to :user #foreign key -> user_id
  accepts_nested_attributes_for :user
end

Error

undefined method `lastname' for #<ActiveRecord::Relat开发者_运维知识库ion:0xb6ad89d0>


#this works
@medicalhistory = Medicalhistory.find(current_user.id) 
print   "\n" + @medicalhistory.lastname

#this doesn't!
@medicalhistory = Medicalhistory.where("user_id = ?", current_user.id)
print   "\n" + @medicalhistory.lastname #error on this line


Well, you are getting back an object of ActiveRecord::Relation, not your model instance, thus the error since there is no method called lastname in ActiveRecord::Relation.

Doing @medicalhistory.first.lastname works because @medicalhistory.first is returning the first instance of the model that was found by the where.

Also, you can print out @medicalhistory.class for both the working and "erroring" code and see how they are different.


One other thing to note, :medicalhistory should be plural as it is a has_many relationship

So your code:

class User < ActiveRecord::Base
  has_many :medicalhistory 
end

Should be written:

class User < ActiveRecord::Base
  has_many :medicalhistories 
end

From the Rails docs (found here)

The name of the other model is pluralized when declaring a has_many association.

This is because rails automatically infers the class name from the association name.

If a user only had_one medicalhistory this would be singular as you had written:

class User < ActiveRecord::Base
  has_one :medicalhistory 
end

I know you already accepted an answer, but thought this would help reduce further errors/confusion.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜