2017-07-28 14 views
0

私はデータテーブルのフィルタを行う方法を理解しようとしていますので、私の考えでは、<option>にURLにパラメータを適用し、basis変更するテーブルには、しかし、私のコントローラは、私はそれを適用するために考えることができる最善の方法であるパラメータParamsを使用したRailsルート - コントローラを無視するコントローラ

def index 
    @steam_games = SteamGame.all 
    @steam_games = SteamGame.where("#{params[:genre]} = ANY (genres)") if params[:genre].present? 
     respond_to do |format| 
     format.html 
     format.json { render json: SteamGamesDatatable.new(view_context, @steam_games) } 
     end 
    end 

を無視しているようです。

テストするには、URLを変更しない場合でも、 get '/steam_games/:genre', to: 'steam_games_controller#index'をルートに追加しました。

私のデバッガは、私は、コンソールでParameters: {"genre"=>"indie"}を参照してください負荷ON

--- !ruby/object:ActionController::Parameters 
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
    genre: indie 
    controller: steam_games 
    action: index 
permitted: false 

を示しています。

なぜこれが機能していないのですか? genresはARRAYなので、私はwhereをそのように持っていますが、パラメータバインドを変更してはいけません。

(これ以外に何かを登録することはわかりません)。

可能性がありますDatatablesはコントローラのindexを破っていますが、私はそれをリストにフィードしてから信じていません。

答えて

0

これは強力なパラメータの問題です。パラメタの使用を許可する必要があります。あなたはコントローラでこれを試すことができます。

def index 
    @steam_games = SteamGame.all 
    @steam_games = SteamGame.where("#{steam_game_params[:genre]} = ANY (genres)") if steam_game_params[:genre].present? 
    respond_to do |format| 
     format.html 
     format.json { render json: SteamGamesDatatable.new(view_context, @steam_games) } 
    end 
end 

private 

def steam_game_params 
    params.permit(:genre) 
end 

HereActionController::Parametersドキュメントへのリンク。

+0

私は変更を行いました(それは意味がありますが、私はそれも許可されませんでした)。しかし今、アレイは空に戻っています。 (SteamGame.where( "'' Indie '= ANY(genres)」)。count'が動作し、出力が見えませんが、私は仮定しています SteamGame.where("'#{steam_game_params [:genre]} ' = ANY(ジャンル) ")もしsteam_game_params [:genre] .present? ' 類似のクエリを入力していますか? – DNorthrup

+0

私はあなたの新しい質問を完全に理解していません。「似たような質問をしていますか? ...強力なパラメータを追加してからエラーが変更されましたか? '.count'メソッドがうまくいけば、あなたのパラメータは実際にそこにあるのを確認する必要があります。 '' SteamGame.where( "#{steam_game_params [:genre]} = ANY(genres)") 'を入れ、出力を確認してください。 –

+0

出力を試してみます。 steam_paramsを置くことで、paramsに気付くようになったようですが、常にnilで返されます。しかし、Consoleで同じgenreのクエリを実行すると結果が得られます。 – DNorthrup

関連する問題