我有两种型号:用户和产品。一个产品只有一个用户,作为所有者。我想收集所有产品,除了current_user已经拥有的产品。所以我在 app / controllers / products_controller.rb 中做了类似的事情:
def index
Product.all.each do |p|
if p.owner != current_user
@filtered_products = [ @filtered_products, p ]
end
end
@products = @filtered_products.paginate(page: params[:page])
end
但我认为这不是一个好习惯。你知道更好的事吗?
答案 0 :(得分:0)
为什么不使用简单的where
?
def index
@products = Product.not_owned_by(current_user).page(params[:page])
end
class Product < ActiveRecord::Base
belongs_to :user
def self.not_owned_by(u)
where("owner_id <> ?", u.id)
end
end
此外,当构建数组实例化一个空数组,然后使用<<
而不是你正在进行的重新分配时,它大约快4倍,你也不会得到nil
第一个指数的价值。