Rails 5:在视图中合并参数 - 允许它们的位置?

时间:2017-07-23 10:42:24

标签: ruby-on-rails ruby-on-rails-5 strong-parameters

Rails 5中将实际页面查询字符串合并为一个新链接的新方法是什么?

我们假设我有页面http://localhost:3000?type=a,我想在页面上的链接中添加另一个查询参数:

<%= link_to root_path(params.merge(tech: "b")) do %>

但是我得到:无法将未经许可的参数转换为哈希。 我应该在哪里允许参数? 我尝试在 before_action 过滤器中进行此操作,但似乎为时已晚。

由于

修改

我的控制器:

class HomeController < ApplicationController
  before_action :permit_params

  ...

  private

  def permit_params
    params.permit(:tech, :type)
  end
end

1 个答案:

答案 0 :(得分:3)

您只需要将要与

合并的参数列入白名单
<%= link_to 'Home', root_path(params.permit(:type, :tech).merge(tech: 'b')) %>

并获取/?tech=b&type=a。如果确实想要所有参数,您可以使用permit!

<% params.permit! %>
<%= link_to 'Home', root_path(params.merge(tech: 'b')) %>

这会给你/?action=index&controller=home&tech=b&type=a,虽然这些键似乎没有搞乱任何东西,很可能不需要(controlleraction将被覆盖而不是传递到你的控制器动作)。注意:controller / action是这样设置的,因为我正在执行HomeController index操作,而不是因为这是root_path指向的内容

我只是不认为我可以推荐这样做,但是(看起来如果,imo)...坚持使用白名单。