2015-01-04 3 views
0

У меня есть дискуссионный форум, где пользователи могут видеть список непрочитанных сообщений. То, как я делаю это, чтобы использовать 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 

Так как это работает, что есть список всех почтовых идентификаторов пользователя просмотрены. Он создается методом «шоу»:

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 для всех сообщений, чтобы я мог по существу «пометить все как прочитанное». Эта линия работает отлично подходит для создания Посмотрите на данный пост:

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

Вы можете создать Look автоматически, просто добавив пользователей к сообщениям.

Post.all.each { |p| p.users << current_user; p.save } 
Смежные вопросы