2016-07-19 12 views
0

paramsで受け取ったIDがnullでない場合、ActiveRecord_Relationを返すメソッドがあり、where句を連結したいと思います。 nilの値が代わりにnilをidを持つのitem_idを検索全体を無効にidがnullでない場合にのみwhere句を連結する方法

query.where(item_id: params[:item_id]) 

れ、中:この

query.where(item_id: params[:item_id]) # only if params[:item_id] is not null. 

query # only if params[:item_id] is null. 

のようなものは、それは最初のもののようなクエリ完璧になります。

もちろん、私は条件付きでこれを行うことができます。しかし、これを行うための道があるかどうかを知りたいと思います。 1ライナーまたは何か

ありがとう!

答えて

0

モデルのスコープを使用して、モデルのスコープを設定します。あなたは(あなたが照会しているモデルはProductのようなものと呼ばれていると仮定した場合)、次のような何かを行うことができますので、常に、クエリを返すスコープ:

class Product < ActiveRecord::Base 
    scope :by_item_id, -> (item_id) { where(item_id: item_id) if item_id } 
end 

次にあなたがProduct.by_item_id(params[:item_id])を呼び出すことができます。

0

クエリーを繰り返す場合は、範囲を書くことが最善の方法の1つです。 ない場合、あなたは、単に行うことができます。

query.where(item_id: params[:item_id]) if params[:item_id] 
+0

が、のparams場合は、この溶液を用いて、[:ITEM_ID] nilで、全体のクエリが実行されません。 params [:item_id]がnilの場合にクエリを実行したい – Quin

関連する問題