0

私は次のようなポリモーフィックな関連付けを持っています

class Certificate < ActiveRecord::Base
  attr_accessible :certification_id, :certified_id, :certified_type
  belongs_to :certification
  belongs_to :certified, :polymorphic => true
end

class Certification < ActiveRecord::Base
  attr_accessible :name, :slug
  belongs_to :association
end

class Association < ActiveRecord::Base
  has_many :certifications
  attr_readonly :name, :id
  attr_protected :name
end

Userモデルを想定

class User < ActiveRecord::Base
  has_many :certificates, :as => :certified
end

associationポリモーフィックアソシエーション内からオブジェクトにアクセスしようとしています

u = User.first

u.certificatesのインスタンスの配列を返しますCertificate

u.certificates.first.certificationのインスタンスを返しますCertification

しかし

u.certificates.first.certification.associationエラーを返しstack level too deep、2回目の実行時にコンソール/サーバーがillegal hardware instructionメッセージとともにクラッシュします

この表現はコードの美しさの女王ではないことは確かですが、うまくいくはずですよね。

4

1 に答える 1

3

第一に、アソシエーションはモデル名の不幸な選択かもしれないと思います。

ActiveRecord :: Baseには、Associationというモデルへの関連付けを設定することで、Certificationモデルに対してオーバーライドしたAssociationというインスタンスメソッドがすでにあります。それが何をするのかを正確に追跡する機会はありませんでしたが、「関連付け」と呼ばれる方法は、モデルの関連付けを反映して操作する上でおそらく非常に重要であり、それをオーバーライドするとエキサイティングな結果が得られると思います。

また、上記の段落を読むのがいかに厄介であるかを考えると、AssociationはとにかくRailsモデルの最適な名前ではないかもしれないことをお勧めします!

そのモデルとそのモデルへの関連付けの名前を変更して、問題が解決するかどうかを確認してください。

于 2012-10-22T14:20:59.747 に答える