Ruby on rails 3 - ActiveRecord::Relation 的未定义方法



用户模型

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

我知道你已经接受了答案,但认为这将有助于减少进一步的错误/混乱。

相关内容

  • 没有找到相关文章

最新更新