在我的rails 3.2应用程序中,我有一个User模型和一个具有以下多态关联的Physician模型:
用户
class User < ActiveRecord::Base
attr_accessible :authenticatable_id, :authenticatable_type, :email
belongs_to :authenticatable, polymorphic: true
end
医师
class Physician < ActiveRecord::Base
attr_accessible :name
has_one :user, as: :authenticatable
end
我想在控制台中测试这些并遇到一个奇怪的事情。这样做的:
p = Physician.new
p.user.build
给了我NoMethodError: undefined method 'build' for nil:NilClass
- 但为什么医生的用户属性为nil
?
奇怪的是,当我将医生模型更改为has_many :users
而不是has_one :user
时,
p = Physician.new
p.users.build
一切正常。
我错过了让has_one
协会工作的原因?
答案 0 :(得分:1)
您可能应该p.build_user
,因为has_one
没有添加association.build
方法。您还可以查看apidock有关方法has_one和has_many&#39;注入&#39;进入你的模型。
答案 1 :(得分:0)
我并不完全清楚,但您似乎正在创建一个Physician
也是User
。因此,它可以使用User
提供的功能。
您的实现创建了两个对象Physician
和一个User
,但严格查看情况时,两者都是相同的医生/用户。
所以你应该让Physician
继承User
:
class Physician < User
并删除Physician
和User
之间的多态关系。