创建模型时包含数组
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 }
我有一个论坛,用户可以在其中查看未读 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:
创建一个 Lookunless 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 }