2015-01-04 70 views
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) 

我想這樣做的原因是這樣用戶就可以將所有帖子標記爲已讀。

回答

1

只需將用戶添加到帖子中,您就可以自動創建Look。

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