特定のクライアントに属する製品を見つけるために、次の範囲があります。
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? }
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