ユーザーに子供がいるレールアプリがあります。したがって、:users と :children の 2 つのモデルがありました。
以前は 1 対多の関係 (has_many / belongs_to) を使用していましたが、関係に関する変数を格納できる多対多の関係に開放したいと考えました。そこで、関係を「has_many through」関係に変更しました。:relationships というテーブルを作成しました。ちょっとした注意点: ユーザーのforeign_keyを:parent_idにしたいです。設定方法は次のとおりです。
スキーマ:
create_table "relationships", :force => true do |t|
t.integer "child_id"
t.integer "parent_id"
t.datetime "created_at"
.
.
.
create_table "users", :force => true do |t|
t.string "email", :null => false
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "first_name"
t.string "last_name"
.
.
.
create_table "children", :force => true do |t|
t.string "name", :null => false
t.integer "parent_id", :null => false
t.datetime "created_at", :null => false
.
.
.
クラス定義:
ユーザー.rb:
has_many :relationships, foreign_key: "parent_id"
has_many :children, :through => :relationships, foreign_key: "parent_id"
child.rb:
has_many :relationships, foreign_key: "child_id"
has_many :parents, :through => :relationships
関係.rb:
belongs_to :parent, class_name: "User", :foreign_key => :parent_id
belongs_to :child, class_name: "Child", :foreign_key => :child_id
特定のユーザーを選択して user.children を取得しようとすると、[] が返されます。新しい子を追加しようとしてもうまくいきません。親と子を定義できますが、保存しようとすると、2 つを関連付けることができません。親が表示されないため、エラーが発生します。
* ActiveRecord::StatementInvalid (PG::Error: エラー: 列 "parent_id" の null 値が not-null 制約に違反しています*
クラス定義を 1 対多の設定に戻すと、子に問題なくアクセスできます。何が問題なのかわかりません。どんな助けでも大歓迎です。
ありがとう