我试图弄清楚如何为数据表做过滤器,所以我在过渡期间的想法是让<option>
对URL应用参数,basis
然而,要改变的表,我的控制器似乎忽略了参数
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'
到路线,即使我不想改变网址。
我的调试器正在显示
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
genre: indie
controller: steam_games
action: index
permitted: false
ON load我在控制台中看到Parameters: {"genre"=>"indie"}
。
为什么这不起作用?要注意genres
是一个ARRAY,这就是为什么我有where
,但这不应该改变参数绑定。
(不确定还有什么可以链接reg。这个。)
它可能的数据表正在胜过控制器的index
,但我不相信,因为我把它提供给列表。
答案 0 :(得分:0)
在我看来,这是一个强烈的params问题。你需要允许使用params。您可以在控制器中尝试这样的事情。
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
文档的链接。