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

2 つのケース (クライアント 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 に答える