使用Param的Rails路由 - 控制器忽略参数

时间:2017-07-28 17:27:24

标签: ruby-on-rails datatable

我试图弄清楚如何为数据表做过滤器,所以我在过渡期间的想法是让<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,但我不相信,因为我把它提供给列表。

1 个答案:

答案 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文档的链接。