使用“not something”条件过滤数组

时间:2013-06-18 08:10:14

标签: ruby-on-rails

我有两种型号:用户和产品。一个产品只有一个用户,作为所有者。我想收集所有产品,除了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

但我认为这不是一个好习惯。你知道更好的事吗?

1 个答案:

答案 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第一个指数的价值。