我有以下范围来查找属于特定客户的产品。
scope :client, lambda {|client| where("client_id = ?", client) }
并且可以被调用
Product.client(parameter)
如果没有给出客户 ID,有什么方法可以声明我的范围以返回所有产品?这是不应该使用范围的情况吗?
我有以下范围来查找属于特定客户的产品。
scope :client, lambda {|client| where("client_id = ?", client) }
并且可以被调用
Product.client(parameter)
如果没有给出客户 ID,有什么方法可以声明我的范围以返回所有产品?这是不应该使用范围的情况吗?
它可以与范围一起正常工作
scope :client, lambda {|client = nil| where("client_id = ?", client) unless client.nil? }
您应该使用范围以外的东西,因为您真的想在两种情况之间切换(指定/不指定客户端 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
...