Rails 5:在视图中合并参数 - 在哪里允许它们?
Rails 5: Merging parameters in view - where to permit them?
Rails 5 中将实际页面查询字符串合并到 link 的新方法是什么?
假设我有页面 http://localhost:3000?type=a,我想向页面 link 添加另一个查询参数:
<%= 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
您只需要将要合并的参数列入白名单
<%= 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
,虽然这些键似乎没有搞乱任何东西,但很可能不需要(并且 controller
和 action
将被覆盖并且没有传递到您的控制器操作中)。注意:controller
/action
是这样设置的,因为我正在进行 HomeController
index
操作,而不是因为 root_path
指向
我只是不认为我可以推荐这样做,但是(似乎不确定,imo)...坚持使用白名单。
Rails 5 中将实际页面查询字符串合并到 link 的新方法是什么?
假设我有页面 http://localhost:3000?type=a,我想向页面 link 添加另一个查询参数:
<%= 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
您只需要将要合并的参数列入白名单
<%= 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
,虽然这些键似乎没有搞乱任何东西,但很可能不需要(并且 controller
和 action
将被覆盖并且没有传递到您的控制器操作中)。注意:controller
/action
是这样设置的,因为我正在进行 HomeController
index
操作,而不是因为 root_path
指向
我只是不认为我可以推荐这样做,但是(似乎不确定,imo)...坚持使用白名单。