0

在我的 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为了让协会运作,我缺少什么?

4

2 回答 2

1

您可能应该这样做,p.build_user因为has_one不添加association.build方法。您还可以检查有关has_onehas_many 'injects' 方法的 apidock 到您的模型中。

于 2013-01-27T13:33:11.840 回答
0

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

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

所以你应该让Physician继承自User

class Physician < User

Physician并去除和之间的多态关系User

于 2013-01-27T13:11:48.030 回答