0

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

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

4

1 回答 1

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在第一个索引处得到一个值。

于 2013-06-18T08:44:49.310 回答