多态关联失败

时间:2013-01-27 13:05:50

标签: ruby-on-rails associations polymorphic-associations rails-activerecord has-one

在我的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协会工作的原因?

2 个答案:

答案 0 :(得分:1)

您可能应该p.build_user,因为has_one没有添加association.build方法。您还可以查看apidock有关方法has_onehas_many&#39;注入&#39;进入你的模型。

答案 1 :(得分:0)

我并不完全清楚,但您似乎正在创建一个Physician也是User。因此,它可以使用User提供的功能。

您的实现创建了两个对象Physician和一个User,但严格查看情况时,两者都是相同的医生/用户。

所以你应该让Physician继承User

class Physician < User

并删除PhysicianUser之间的多态关系。