RoRアプリでモデルを自己参照したいのですが、正確な方法がわかりません。次のノードが前のノードのIDを持つリンクリストを保存したいと思います。どうすればこれを行うことができますかRails方法?これは1対1の関係です。
最も簡単な方法:
class MyModel < ActiveRecord::Base
belongs_to :parent, :class_name => 'MyModel'
has_many :children, :class_name => 'MyModel', :foreign_key => 'parent_id'
end
Rails 5
ユーザーテーブルに列xxx_idを追加します。
移行ファイル内:
add_reference :users, :xxx, index: true
ユーザーモデルにコードを追加します
has_many :users, class_name: 'User', foreign_key: 'xxx_id'
belongs_to :manager, class_name: 'User', foreign_key: 'xxx_id'
すべてのユーザーにマネージャーがない場合は、オプションのtrueを追加する必要があります。
'foreign_key'は必要ありません。デフォルトでは、これは小文字で「_id」という接尾辞が付いたこのクラスの名前であると推測されます。
外部キーがuser_idの場合、ユーザーにはマネージャーは必要ありません。結果は次のとおりです。
has_many :users, class_name: 'User'
belongs_to :manager, class_name: 'User', optional: true
Rails 3.2.14)を使用して機能させるためにしばらく時間を費やしました
自己結合アソシエーション に関するドキュメントの提案は、belongs_to
アソシエーションでは機能しませんでした。外部キーを追加すると、問題が修正されました。
Class User < ActiveRecord::Base
has_many :invitees, class_name: 'User', foreign_key: :invited_by
belongs_to :Host, class_name: 'User', foreign_key: :invited_by
end
自己参照の関連付けに関するRyanBatesによるこのチュートリアルもチェックしてください ここ 。 Hckの答えは機能しますが、私にとってはJOINテーブルが必要なので、Railsの関連付けを通じてhas_manyを使用します。幸運を!