我还是铁杆新手,所以如果这个问题是基本的,我会提前道歉。
我希望用户能够从另一个表中选择一些固定数量的行作为该表中的“最喜欢”元素。目前,我实现这一点的方法是向用户模型添加n个整数列。这些整数将作为外键用作另一个表,用户从中选择收藏夹。这些列默认为0.当用户编辑(添加或删除)收藏夹时,代码必须迭代这些元素并相应地重置它们。
有没有更好的方法来实现此功能?我不认为它可以使用活动记录关联来实现。如果我错了,请纠正我。
谢谢!
答案 0 :(得分:1)
让我们假设您有模型[用户和项目],用户可以在其中收藏项目。
由于该关系是双向的,(用户可以喜欢很多项目)和(项目可以被多种用途所青睐)。因此,我们将使用has_and_belongs_to_many
关联。
我们将创建一个表users_favourite_items
,其中包含数据的元组行:[user1_id,item1_id]
class Item < ActiveRecord::Base
has_and_belongs_to_many :users,
:association_foreign_key => 'user_id',
:class_name => 'User',
:join_table => 'users_favourite_items'
end
class User < ActiveRecord::Base
has_and_belongs_to_many :items,
:association_foreign_key => 'item_id',
:class_name => 'Item',
:join_table => 'users_favourite_items'
end
Then need to create new users_favourite_items migration like below.
class CreateUsersFavouriteItemsTable < ActiveRecord::Migration
def self.up
create_table : users_favourite_items, :id => false do |t|
t.references :item
t.references :user
end
add_index :users_favourite_items, [:item_id, :user_id]
add_index :users_favourite_items, [:user_id, :item_id]
end
def self.down
drop_table :users_favourite_items
end
end