我意识到这篇文章已经很老了,但由于我面临同样的问题,为追随者增加一些清晰度可能会很有趣。正如@ManojMonga 在评论中所说,在这里您需要使用has_and_belongs_to_many
关联。所以模型看起来像:
用户
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
在用户的模型中不是强制性的。它只允许通过用户访问产品。就是这样,如果能帮上忙,我会很高兴的。顺便说一句,我正在使用 Rails 4.1。