web-dev-qa-db-ja.com

ARELを使用して条件付きwhere句を実行するにはどうすればよいですか

条件付きのwhere句をどのように実行できますか?クエリを実行するrakeタスクがあります。次のようなクエリを作成しているとします。

residentials = Residential.where(:is_active => true)

ここで、特定のパラメーターをrakeタスクに渡す場合、where句に追加します。私はこのようなことを考えていました:

residentials.where(:something_else => true) if param_was_passed

しかし、それは既存のwhere句を置き換えるだけです。既存のwhere句に追加するにはどうすればよいですか?

28
kidbrax

Whereステートメントを連鎖させることが可能です

residentials = Residential.where(:is_active => true)
residentials = residentials.where(:other_thing => true) if param_was_passed

これはうまくいくはずです。

これが関数呼び出しの最後の行ではないことを確認してください。その場合、最後の行としてresidentials変数を繰り返します。 (@ digger69のコメントによる)

34
Bert Goethals

ハッシュを作成してから、それを.whereメソッドに提供できます。何かのようなもの:

h = { }
h[:is_active] = true
h[:field_x] = true if param_was_passed

residentials = Residential.where(h)
20
Jits