1

私の Ruby on Rails アプリには、father_id 属性を持つ Idea モデルがあります。モデル定義は、次の関連付けを宣言します。

class Idea < ActiveRecord::Base
    belongs_to :father, :class_name => "Idea", :foreign_key => "idea_id"
    has_many :children, :class_name => "Idea", :foreign_key => "father_id", :dependent => :destroy

Railsコンソールを使用すると、アイデアの子を呼び出すことはできますが、その親を呼び出すことはできないため、間違っていると思います。例えば ​​:

irb(main):008:0> i = Idea.find(75)
=> #<Idea id: 75, father_id: 66>

irb(main):009:0> i.children
=> [#<Idea id: 98, father_id: 75>, #<Idea id: 99, father_id: 75>]

これは、関連付けを介して子を呼び出すことが正常に機能することを意味します。しかし、父親を呼び出すと nil が返されます:

irb(main):010:0> i.father
=> nil

id=66のアイデアはありますが。

モデルをそれ自体にリンクする関連付けで :foreign_key を使用する正しい方法がはっきりとわかりません。誰かがヒントを教えてください。

4

2 に答える 2

0

両方のforeign_key仕様を削除

belongs_to :father, :class_name => "Idea"
has_many :children, :class_name => "Idea", :dependent => :destroy

そして、追加する移行があることを確認してfather_idくださいideas

于 2013-03-29T11:38:04.680 に答える
0

の を取り除き:foreign_key => "idea_id"ますbelongs_to:

belongs_to :father, :class_name => "Idea"
has_many :children, :class_name => "Idea", :foreign_key => "father_id", :dependent => :destroy

(必要に応じて に変更することもできますが"father_id"、これがデフォルトであるため、実際に指定する必要はありません)。

于 2013-03-29T11:15:02.453 に答える