rails 3.2具有可选参数的范围

时间:2012-06-21 21:19:16

标签: ruby-on-rails

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

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

可以通过

调用
Product.client(parameter)

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

2 个答案:

答案 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无论如何......