0

私のrails3.2アプリケーションには、次のポリモーフィックな関連付けを持つユーザーモデルと医師モデルがあります。

ユーザー

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およびhas_many ' injects'メソッドに関する apidoc を確認することもできます。has_oneassociation.build

于 2013-01-27T13:33:11.840 に答える
0

私には完全には明らかではありませんが、あなたも を作成しているようPhysicianですUser。そのため、 が提供する機能を利用することができUserます。

あなたの実装は 2 つのオブジェクト onePhysicianと oneを作成しますUserが、状況を厳密に見ると、両方とも同じ Physician/User です。

Physicianしたがって、次から継承させる必要がありますUser

class Physician < User

と の間の多態的な関係を削除しPhysicianますUser

于 2013-01-27T13:11:48.030 に答える