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