2017-01-03 8 views
3

どこでRailsをオプションにすることができますか?オプションRailsのどこにある

私が試した:

@pages = Page 
      .where(status: params[:status].present? ? params[:status] : 1) 
      .where(parent_id: nil) if params[:status].blank? 
      .order(sort_column + ' ' + sort_direction) 

をしかし、それはブロックを終了するために見て、代わりに返します:undefined method 'where' for true:TrueClass

答えて

4

あなたはこれだけあなたが3列にあなたの宣言を分割することができ、すべての条件でハッシュを作成し、where

conditions = {} 
conditions[:status] = params[:status].present? ? params[:status] : 1 
conditions[:parent_id] = nil if params[:status].blank? 

@pages = Page.where(conditions).order(sort_column + ' ' + sort_direction) 
+0

私はそれに構文エラーが表示されます!私はRails 4 – Cameron

+0

'.where({status:params [:status] .present??params [:status]:1})を使用しています .where({parent_id:params [:status] .blank? ) .order(sort_column + '' + sort_direction) これを試してください – amrdruid

+1

2番目のソリューションをチェックしてくださいきれいで清潔です –

5

に渡しハッシュ構文でwhereに条件を渡すことができます。 Railsはクエリの読み込みを遅らせるので、ここでのパフォーマンスは心配しないでください。それは正常に動作します:

@pages = Page.where(status: params[:status].present? ? params[:status] : 1) 
@pages = @pages.where(parent_id: nil) if params[:status].blank? 
@pages = @pages.order(sort_column + ' ' + sort_direction) 
関連する問題