0

where()次のようにモデルを 呼び出すことでクエリを検索できることを認識しています。Post.where(:title => 'My First Post')

ただし、ユーザーが検索パラメーターをフィルターで除外するかどうかわからない場合はどうなりますか?たとえば、オプションのtitleフィールドがある検索フォームがあります。タイトルが入力されている場合、フォームはタイトルを検索する必要があります。ただし、そうでない場合は、フォームはすべてのフィールドを返す必要があります。

私はの線に沿って何かをしてみました

search = Post.all
if params[:title].present?
   search.where(:title => params[:title])
end

ただし、Post.allを呼び出すと、Railsはすぐに検索結果を返し、条件をさらに追加することはできません/

どうすればよいですか?

ありがとう!

4

2 に答える 2

1

ここで連鎖する関係が実際にはあまりないことを考えると、三項演算子を使用した単純なワンライナーで次のことができるように思われます。

@posts = params[:title].present? ? Post.where(:title => params[:title]) : Post.all

...:where句のスコープがない場合、とにかく、後でそれを:allにチェーンすることはできません。

于 2011-01-02T22:59:21.357 に答える
1

.allarelの「finisher」メソッドであり、クエリが実際に呼び出されるようにします(とも同じです.each.first。したがって、条件付きでスコープを構築し続けることができるようにしたい.all場合は、それを呼び出す場合は、最後に呼び出す必要があります。

于 2011-01-02T23:00:05.077 に答える