2017-07-28 83 views
0

我想弄清楚如何做一个数据表的过滤器,所以我的想法在临时是有一个<option>适用于一个参数的URL,和basis的表改变,但是,我的控制器似乎忽略了参数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 

是我能想到应用它的最佳方式。

为了测试我还在 get '/steam_games/:genre', to: 'steam_games_controller#index'中添加了路由,即使我希望URL不会改变。

我的调试器显示

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

负载我看到Parameters: {"genre"=>"indie"}在控制台中。

为什么这不起作用?要注意genres是一个ARRAY,这就是为什么我有这样的where,但是这不应该改变参数绑定。

(不确定链接reg。this还有什么)。

这是可能的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 

Here年代到ActionController::Parameters文档的链接。

+0

我做了改变(这是有道理的,我也没有在允许范围内)。但是现在数组不断被返回为空。 “SteamGame.where(”'Indie'= ANY(genres)“)。count'作品,我看不到输出,但我认为是 SteamGame.where(”'#{steam_game_params [:genre]}' = ANY(流派)“)如果steam_game_params [:流派] .present?' 是否提供了类似的查询? – DNorthrup

+0

我不确定我完全理解你的新问题,“是否提出类似的查询?” ...你添加了强烈的参数后,你的错误是否改变了?如果'.count'方法有效,那么你应该检查你的参数实际上是否存在。使用'puts SteamGame.where(“#{steam_game_params [:genre]} = ANY(流派)”)'并检查您的输出。 –

+0

我会尝试输出。把steam_params似乎已经做到了,所以它注意到params,但它不断返回'nil' - 但是如果我要在Console中对同一'genre'进行查询,我会得到一个结果。 – DNorthrup