用户模型
class User < ActiveRecord::Base
has_many :medicalhistory
end
医学历史模型
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
好吧,您正在返回一个ActiveRecord::Relation
的对象,而不是您的模型实例,因此错误,因为ActiveRecord::Relation
中没有调用lastname
的方法。
执行@medicalhistory.first.lastname
工作,因为@medicalhistory.first
返回where
找到的模型的第一个实例。
此外,您可以打印出工作代码和"错误"代码的@medicalhistory.class
,并查看它们有何不同。
需要注意的另一件事,:medicalhistory
应该是复数的,因为它是一个has_many
关系
所以你的代码:
class User < ActiveRecord::Base
has_many :medicalhistory
end
应该写:
class User < ActiveRecord::Base
has_many :medicalhistories
end
来自 Rails 文档(可在此处找到)
声明has_many时,另一个模型的名称是复数的 协会。
这是因为 rails 会自动从关联名称推断类名。
如果用户只had_one
medicalhistory
这将是您编写的单数:
class User < ActiveRecord::Base
has_one :medicalhistory
end
我知道你已经接受了答案,但认为这将有助于减少进一步的错误/混乱。