条件付きのwhere句をどのように実行できますか?クエリを実行するrakeタスクがあります。次のようなクエリを作成しているとします。
residentials = Residential.where(:is_active => true)
ここで、特定のパラメーターをrakeタスクに渡す場合、where句に追加します。私はこのようなことを考えていました:
residentials.where(:something_else => true) if param_was_passed
しかし、それは既存のwhere句を置き換えるだけです。既存のwhere句に追加するにはどうすればよいですか?
Whereステートメントを連鎖させることが可能です
residentials = Residential.where(:is_active => true)
residentials = residentials.where(:other_thing => true) if param_was_passed
これはうまくいくはずです。
これが関数呼び出しの最後の行ではないことを確認してください。その場合、最後の行としてresidentials
変数を繰り返します。 (@ digger69のコメントによる)
ハッシュを作成してから、それを.where
メソッドに提供できます。何かのようなもの:
h = { }
h[:is_active] = true
h[:field_x] = true if param_was_passed
residentials = Residential.where(h)