我有以下范围来查找属于特定客户的产品。
scope :client, lambda {|client| where("client_id = ?", client) }
可以通过
调用Product.client(parameter)
如果没有给出客户ID,我是否可以声明我的范围以返回所有产品?这是不应该使用范围的情况吗?
答案 0 :(得分:6)
它可以适用于范围
scope :client, lambda {|client = nil| where("client_id = ?", client) unless client.nil? }
答案 1 :(得分: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
无论如何......