检查用户是否查看了对象

时间:2015-12-10 23:32:58

标签: ruby-on-rails ruby

我有一个带有album模型的图库。

我想在用户查看相册时保存,以便能够过滤掉用户尚未见过的相册。

你会如何塑造这个?

创建一个UserView生成并存储在我能想到的每个第一个视图上 - 但感觉就像要保存的大量数据一样。

2 个答案:

答案 0 :(得分:1)

不,这不是很多数据,因为您只需要存储user_idalbum_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,否则创建它。

为每个视图创建一个对象似乎很多,但数据很便宜。 :)