Ruby on rails 带可选参数的rails 3.2范围

Ruby on rails 带可选参数的rails 3.2范围,ruby-on-rails,Ruby On Rails,我有以下范围来查找属于特定客户的产品 scope :client, lambda {|client| where("client_id = ?", client) } 可以通过 Product.client(parameter) 如果没有提供客户id,是否有任何方法可以声明我的范围以返回所有产品?这是一种不应该使用作用域的情况吗?您应该使用作用域以外的东西,因为您确实希望在这两种情况之间切换(指定/不指定客户端id)并做出不同的响应。这个怎么样: class Product < Act

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

scope :client, lambda {|client| where("client_id = ?", client) }
可以通过

Product.client(parameter)

如果没有提供客户id,是否有任何方法可以声明我的范围以返回所有产品?这是一种不应该使用作用域的情况吗?

您应该使用作用域以外的东西,因为您确实希望在这两种情况之间切换(指定/不指定客户端id)并做出不同的响应。这个怎么样:

class Product < ActiveRecord::Base
  def self.by_client(client)
    if client
      where(client_id: client)
    else
      all
    end
  end
end
类产品
此代码将始终返回类似于
范围的输出
,因此您可以使用它进行链接等


注意,这也会整理代码,不需要特定的作用域。并且确保你不是真的想让
产品有很多客户,不管怎样,
它可以在范围内正常工作

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

如果没有提供客户机id,我会遇到参数太少的错误。我遗漏了什么吗?你应该用
客户端
调用它,即使
客户端
nil
。如果您试图将其称为
Product.by_client()
而不带任何参数,只需使用
Product.all
版本即可!您可以将该方法调整为
self.by_client(client=nil)
,这样您就不需要指定
客户端
,但这对我来说似乎很愚蠢,因为在代码中的其他地方会有一个
if
语句来决定是否传递
客户端
。如果要这样做,只需在代码中调用所需的版本。