我有一个带有album
模型的画廊。检查用户是否查看过对象
我想保存当用户查看相册时,能够过滤掉用户没有看到的相册。
你会如何模型?
创建一个UserView
,它是在我能想到的每个第一个视图上生成并存储的 - 但感觉像是要保存很多数据。
我有一个带有album
模型的画廊。检查用户是否查看过对象
我想保存当用户查看相册时,能够过滤掉用户没有看到的相册。
你会如何模型?
创建一个UserView
,它是在我能想到的每个第一个视图上生成并存储的 - 但感觉像是要保存很多数据。
不,这不是很多数据,因为您只需存储user_id
和album_id
。以下是一个可让您存储相关数据的示例。它还确保您尝试存储的数据是唯一的。
class AlbumView < ActiveRecord::Base
belongs_to :user
belongs_to :album
validates :user_id, presence: true, uniqueness: { scope: [:album_id] }
end
class User < ActiveRecord::Base
has_one :album_view
end
# Won't fail if view already exists
AlbumView.create({
user: current_user,
album: album
})
我认为你有正确的想法。 Album
型号可能为has_many :album_views
。 然后你的User
模型应该有一个has_many :album_views
。
然后在你的AlbumView模式,建立并创建一个迁移:
def change
create_table :album_view do |t|
t.integer :album_id
t.integer :user_id
t.timestamps null: false
end
end
因此,当用户查看相册,设置控制器调用自定义FindOrCreate方法会发现album_view,如果它存在该用户和相册,或者创建它。
为每个视图创建一个对象似乎很多,但数据很便宜。 :)
has_one:album_view,为什么只有一个? – davidwessman