3

Railsは初めてで、異なるGETパラメータ(フィルタリングと並べ替え)に基づいて選択クエリを作成したいと思います。コードで検索する条件を追加する方法はありますか?

例えば:

if params[:ratings] 
  Movie.where(:rating => params[:ratings].keys)
end

次に、順序付けやその他のwhere条件を追加します。どうすればこれを達成できますか?たぶん、(SQL文字列を作成せずに)selectクエリを動的に変更するためのより良い方法があります。ありがとう。

4

2 に答える 2

4

where、、 ...メソッドはorderActiveRecord::Relationshipオブジェクトを返すため、さらに多くのクエリメソッドを呼び出し続けることができます。

query = Movie
if(params[:ratings])
  query = query.where(:rating => params[:ratings].keys)
end
if(params[:some_order_param])
  query = query.order(params[:some_order_param])
end
# Keep adding more 'where', 'order', 'group', ... methods as needed ...
results = query.all
于 2012-08-05T21:49:30.197 に答える
3

このタイプの動作には、実際にはhas_scopegemをお勧めします。これにより、モデルにスコープとクラスメソッドを定義し、それらをコントローラーでのフィルタリングや順序付けなどに自動的に使用できます。

これはドキュメントからの小さな例ですが、それを使ってできることはたくさんあります:

class Graduation < ActiveRecord::Base
  scope :featured, where(:featured => true)
end

class GraduationsController < ApplicationController
  has_scope :featured, :type => :boolean
end
于 2012-08-05T22:02:13.990 に答える