创建模型时包含数组

Include array when creating a model

我有一个论坛,用户可以在其中查看未读 post 列表。我这样做的方法是使用外观、用户和 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

所以它的工作方式是有一个用户查看过的所有 post 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

到目前为止一切正常。问题是我想为所有 post 创建一个 Look,这样我基本上可以 'mark all as read'。此行适用于为当前 post:

创建一个 Look
unless Post.find(params[:id]).in?(not_viewed_ids)
  Look.create(user: current_user, post: @post, viewstamp: Time.now)
end

...但是我如何制作一个为每个 post 创建外观 的外观?像这样:

Look.create(user: current_user, post: [NEED ARRAY OF POSTS HERE], viewstamp: Time.now)

我想这样做的原因是用户可以将所有 post 标记为已读。

您只需将用户添加到帖子中即可自动创建 Look。

Post.all.each { |p| p.users << current_user; p.save }