要创建连接表,请执行以下操作:
rails g migration create_products_users_table
完成后,您需要在下面添加一些代码,以在连接表中创建字段。注意:id => false
, 因为您不需要连接表中的 id:
class CreateProductsUsersTable < ActiveRecord::Migration
def change
create_table :products_users, :id => false do |t|
t.references :product
t.references :user
end
add_index :products_users, [:product_id, :user_id]
add_index :products_users, :user_id
end
end
上面的代码还创建了一些索引,并确保即使在数据库级别也没有重复项。
然后,您的模型必须如下所示:
class Product < ActiveRecord::Base
has_and_belongs_to_many :users
end
class User < ActiveRecord::Base
has_and_belongs_to_many :products
end
当您正确地销毁用户时,例如user.destroy
而不只是删除它(有区别),那么连接表中的相关行也将被删除。这是内置到 ActiveRecord 中的。
但请注意,这样做不会真正让您使用连接表。它将接受诸如user.products = [product1, product2]
etc 之类的代码和其他好东西,但不会真正使用愿望清单。
如果您确实想使用愿望清单,则必须使用不同的方式创建和使用中间连接表has_many :through
(我没有检查 PinnyM 的答案,但这可能是这样做的方法)。