Ruby on rails 为用户隐藏项目

Ruby on rails 为用户隐藏项目,ruby-on-rails,Ruby On Rails,我有两种型号: model User id:integer name:string model Item id:integer name:string 实现功能的最佳方法是什么: 所有用户都可以查看所有项目。当前用户可以“隐藏项目”。然后,项目将不显示,而是显示给没有隐藏项目的用户。您需要一个辅助模型来处理单个项目的“隐藏”逻辑。以下代码说明了如何使用子查询执行此操作: class HiddenItem < ActiveRecord::Base belongs_to :user

我有两种型号:

model User id:integer name:string

model Item id:integer name:string
实现功能的最佳方法是什么:


所有用户都可以查看所有项目。当前用户可以“隐藏项目”。然后,项目将不显示,而是显示给没有隐藏项目的用户。

您需要一个辅助模型来处理单个项目的“隐藏”逻辑。以下代码说明了如何使用子查询执行此操作:

class HiddenItem < ActiveRecord::Base
  belongs_to :user
  belongs_to :item      
end

class Item < ActiveRecord::Base
  has_many :hidden_items

  def self.visible_for_user(user)
    subquery = user.hidden_items.select("hidden_items.item_id").to_sql
    where("items.id NOT IN (#{subquery})")
  end
end

class User < ActiveRecord::Base
  has_many :hidden_items

  def visible_items
    Item.visible_for_user(self)
  end      
end
如果要隐藏项目,可以执行以下操作:

user.hidden_items.create(item_id: item.id)
user.hidden_items.create(item_id: item.id)