我有一个带有album
模型的图库。
我想在用户查看相册时保存,以便能够过滤掉用户尚未见过的相册。
你会如何塑造这个?
创建一个UserView
生成并存储在我能想到的每个第一个视图上 - 但感觉就像要保存的大量数据一样。
答案 0 :(得分:1)
不,这不是很多数据,因为您只需要存储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
})
答案 1 :(得分:1)
我认为你有正确的想法。 Album
模型可以has_many :album_views
。
然后,您的User
模型应该有has_many :album_views
。
然后在您的AlbumView模型中,设置belongs_to :album
并创建迁移:
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,否则创建它。
为每个视图创建一个对象似乎很多,但数据很便宜。 :)