3 つの異なる HABTM モデルの 3 つの ID を格納する 3 列の結合テーブルがあります。
モデル
# ProductGrade.rb
has_and_belongs_to_many :vendors, :join_table => "item_codes_product_grades_vendors"
has_and_belongs_to_many :item_codes, :join_table => "item_codes_product_grades_vendors"
# Vendor.rb
has_and_belongs_to_many :prouduct_grades, :join_table => "item_codes_product_grades_vendors"
has_and_belongs_to_many :item_codes, :join_table => "item_codes_product_grades_vendors"
# ItemCode.rb
has_and_belongs_to_many :vendors, :join_table => "item_codes_product_grades_vendors"
has_and_belongs_to_many :product_grades, :join_table => "item_codes_product_grades_vendors"
ユーザーがベンダー モデルを更新したときに、3 つの部分の関連付けを記録したいだけです。
Vendors_Controller.rb
def update
i = ItemCode.find(params[:vendor][:item_codes].to_i)
i.vendors << Vendor.find(params[:id])
i.product_grades << ProductGrade.find(params[:product_grade_id])
redirect_to product_grade_vendor_path
end
これにより、3 列のデータが結合テーブルに正しく保存されますが、次のように 2 つの異なるレコードが作成されます。
-- *product_grade_id* -- *vendor_id* -- *item_code_id* --
---------------------------------------------------------
-- 12 -- NULL -- 4 --
-- 12 -- 6 -- NULL --
これはおそらくばかげた構文の問題だと思いますが、コントローラーにこれらの値の両方を 1 つのレコードに保存させる方法を知りたいだけです。
助けてくれてありがとう!