4

我有以下范围来查找属于特定客户的产品。

scope :client, lambda {|client| where("client_id = ?", client) }

并且可以被调用

Product.client(parameter)

如果没有给出客户 ID,有什么方法可以声明我的范围以返回所有产品?这是不应该使用范围的情况吗?

4

2 回答 2

7

它可以与范围一起正常工作

scope :client, lambda {|client =  nil| where("client_id = ?", client) unless client.nil? }
于 2012-06-21T21:47:48.800 回答
1

您应该使用范围以外的东西,因为您真的想在两种情况之间切换(指定/不指定客户端 ID)并做出不同的响应。这个怎么样:

class Product < ActiveRecord::Base
  def self.by_client(client)
    if client
      where(client_id: client)
    else
      all
    end
  end
end

此代码将始终返回类似于 的输出的内容scope,因此您可以链接它等。

请注意,这也会整理代码并且不需要特定的范围。并确保您实际上并不意味着has_many :clients无论如何Product...

于 2012-06-21T21:24:09.853 回答