URLで指定された条件で、データベースからレコードのページ分割されたリストを取得しようとしています。
例: URL が次のようなものである場合: ?name=Michael&age=20
20 歳のすべてのマイケルを表示する必要があります。
しかし、url が のような場合&age=20
、20 歳のすべての人を表示し、「name」パラメーターを無視する必要があります。
1ページに2つのリストをページ付けしています。どちらも同じモデルから来ており、位置だけが異なるため、コントローラーで2つのページ付けが定義されています:
@boss = Person.paginate(:page => params[:boss_page], :conditions => "position = 1")
@manager = Person.paginate(:page => params[:manager_page], :conditons => "position = 2")
パラメータが存在する場合にのみURLから条件を追加する方法は?
私はこのようにしようとしていました:
conditions = []
conditions << [ "age = ?", params[:age] ] if params[:age].present?
しかし、URLにparamを渡すとエラーが発生します:
undefined method `%' for ["age = ? ", "1"]:Array
次の質問は、この配列の条件を条件「位置 = 1」とマージする方法です。
更新:条件を使用してページネーションを行う方法を理解していますが、GETパラメーターに基づいて条件を指定するための最良のアイデアがわかりません。私はいつもこのようにすることができました:
if params[:age].present?
@boss = version with age conditons
else if params[:age].present? and params[:name].present?
@boss = version with age and name
else if params[:name].preset?
@boss = version with name only
しかし、レールではもっと簡単にできると思います。