13

Rails アプリで検索結果ページを作成しようとしていますが (まだ初心者です)、Rails の方法でクエリを作成する方法がわかりません。

たとえば、パラメーターが存在しない場合、すべての結果を返したいとします。ユーザーが検索フォームで 1 ~ n 個のオプション パラメータを渡す場合、それらをクエリに追加します。

次は、「price desc」または「year_built desc」、または両方の組み合わせが指定された並べ替えがある場合です。

最後に will_paginate を使用して結果を分離します

# default to all listings
@listings = Mls.all

@listings.where("listing_price > ?", params[:listing_price]) unless params[:listing_price].blank?
# ... bunch of other search options ...
@listings.where("property_type = ?", params[:property_type]) unless params[:property_type].blank?

# order
@listings.order("some order by param") if some sort param
@listings.order("some order by param") if some other sort param

# paginate results
@listings.paginate(:page => params[:page])

これを行う「Rails」の方法はありますか?

4

2 に答える 2

29

高度な検索に関する (改訂された) Railscasts のエピソードを見たことがありますか? リンクは次のとおりです。http://railscasts.com/episodes/111-advanced-search-form-revised

基本的な考え方はSearch、フォームを介して送信された検索パラメーターを処理するリソースを作成し、バックグラウンドで問題のモデルを検索することです (あなたの場合Mls)

そうすれば、コントローラーで特定のパラメーター (例: params[:listing_price]) の存在をチェックインする代わりに、検索モデル (models/search.rb) で条件を処理できます。

def find_listings
  listings = Mls.order(:name)
  listings = listings.where("listing_price > ?", listing_price) if listing_price.present?
  # ... more condition checking
  listings
end
于 2013-01-05T20:56:35.780 に答える
1

いくつかのリンク:

サードパーティの gem を使用する (メタサーチ)

ゼロからのコード

于 2013-01-05T20:40:33.793 に答える