0
我有一个论坛,用户可以在其中查看未读帖子的列表。我这样做的方法是使用一看,用户和Post模型:创建模型时包含数组
class Look < ActiveRecord::Base
belongs_to :post
belongs_to :user
end
class User < ActiveRecord::Base
has_many :posts, through: :looks
has_many :looks
end
class Post < ActiveRecord::Base
belongs_to :user
has_many :looks
has_many :users, through: :looks
end
所以这个工作的方式是,有所有帖子ID的用户查看列表。它是通过'show'方法创建的:
def show
if current_user
viewer = current_user
view_ids = viewer.posts.pluck(:id).uniq
not_viewed = Post.where("id not in (?)", view_ids)
not_viewed_ids = not_viewed.pluck(:id)
unless Post.find(params[:id]).in?(not_viewed_ids)
Look.create(user: current_user, post: @post, viewstamp: Time.now)
end
end
end
这一切都工作得很好。问题是我想创建一个Look for all posts,这样我就可以将所有标记为已读。该行针对当前岗位创建外观正常工作:
unless Post.find(params[:id]).in?(not_viewed_ids)
Look.create(user: current_user, post: @post, viewstamp: Time.now)
end
...但我怎么做一个,致力于为每一个岗位一看那?就像这样:
Look.create(user: current_user, post: [NEED ARRAY OF POSTS HERE], viewstamp: Time.now)
我想这样做的原因是这样用户就可以将所有帖子标记为已读。