用户模型
class User < ActiveRecord::Base
has_many :medicalhistory
end
Mdedicalhistory模型
class Medicalhistory < ActiveRecord::Base
belongs_to :user #foreign key -> user_id
accepts_nested_attributes_for :user
end
错误
undefined method `lastname' for #<ActiveRecord::Relation: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
答案 0 :(得分:39)
好吧,你回来的是ActiveRecord::Relation
的对象,而不是你的模型实例,因此错误,因为lastname
中没有名为ActiveRecord::Relation
的方法。
执行@medicalhistory.first.lastname
是有效的,因为@medicalhistory.first
正在返回where
找到的模型的第一个实例。
此外,您可以打印@medicalhistory.class
工作和“错误”代码,看看它们是如何不同的。
答案 1 :(得分:5)
另外需要注意的一点是,:medicalhistory
应为复数,因为它是has_many
关系
所以你的代码:
class User < ActiveRecord::Base
has_many :medicalhistory
end
应该写:
class User < ActiveRecord::Base
has_many :medicalhistories
end
来自Rails文档(found here)
在声明has_many时,其他模型的名称会复数 关联。
这是因为rails会自动从关联名称中推断出类名。
如果用户只有had_one
medicalhistory
,那么这就像你写的那样是单数:
class User < ActiveRecord::Base
has_one :medicalhistory
end
我知道你已经接受了答案,但认为这有助于减少进一步的错误/混淆。