投稿がかなり古いことは承知していますが、同じ問題に直面していたので、フォロワーのために明確にすることは興味深いかもしれません. @ManojMonga がコメントで述べたように、ここでは関連付けを使用する必要がありますhas_and_belongs_to_many
。したがって、モデルは次のようになります:
User
has_many :orders, :dependent => :destroy
has_many :products, through: :orders
注文
belongs_to :user
has_and_belongs_to_many :products
製品
has_and_belongs_to_many :orders
次に、Active Record Association Rails Guideで説明されているように、注文と製品の外部キーを保持する結合テーブルを作成する必要があります。移行は次のようになります。
class OrdersProducts < ActiveRecord::Migration
def change
create_table :orders_products, id: false do |t|
t.belongs_to :order, index: true
t.belongs_to :product, index: true
t.timestamps
end
end
end
次に、移行を実行した後、has_and_belongs_to_many メソッドを使用できるようになります。has_an_belongs_to_many アソシエーションで結合テーブルを作成するとき、Active Record はアルファベット順に連結された 2 つのテーブル名から名前が付けられたテーブルを探すことに注意してください。それ以外の名前を付けたい場合は、次のようにモデルで指定する必要があります
。
has_and_belongs_to_many :products, :join_table => "new_tables_name"
製品
has_and_belongs_to_many :orders, :join_table => "new_tables_name"
最後にthe has_many :products, through: :orders
、ユーザーのモデルでは必須ではありません。ユーザーを介して製品にアクセスできるようにするだけです。以上です、何かの参考になれば幸いです。ちなみにRails4.1を使っています。