创建模型时包含数组

时间:2015-01-04 13:10:16

标签: ruby-on-rails ruby-on-rails-4

我有一个讨论论坛,用户可以在其中查看未读帖子的列表。我这样做的方法是使用Look,User和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的列表。它是通过&#39; show&#39;创建的。方法:

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,以便我可以基本上将所有帖子标记为已读“。此行适用于为当前帖子创建Look:

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

...但是如何创建一个为每个帖子创建一个Look ?像这样:

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

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

1 个答案:

答案 0 :(得分:1)

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

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