我目前的链接
link_to title, params.merge(:sort => column, :direction => direction, :page => nil, :search => nil), {class: css_class}
我想在混合中添加remote: true
,但是当我用params.merge
(即{params.merge(), remote: true}
将其加密时,我会收到语法错误。在rails中我需要封装url选项和单独的html选项对吗?
title
和css_class
都是此链接所在的辅助方法中的变量
答案 0 :(得分:2)
最好使用:
link_to 'title', params.merge(:sort => column, :direction => direction, :page => nil, :search => nil), {class: css_class}, :remote => true
答案 1 :(得分:1)
你可以这样做:
link_to title, params.merge(:sort => column, :direction => direction, :page => nil, :search => nil), class: css_class, remote: true
答案 2 :(得分:0)
在Rails 5中,ActionController::Parameters
不再继承自Hash,以阻止人们在请求参数上使用与Hash相关的方法,而无需对其进行显式过滤。
作为此拉取请求的一部分,该请求已回传到Rails 5.1中,部分又回传到Rails 5.0中,如果您尝试在参数对象上调用to_h
而不调用允许,则会引发异常。
在原始params对象(merge
)上调用params.merge(:sort => column, :direction => direction, :page => nil)
会返回一个具有相同允许状态(即尚未对其上进行调用)的新ActionController::Parameters
对象。然后link_to
方法最终在该对象上调用to_h
,这引发了异常。
如果您知道链接中应允许使用哪些参数,则可以使用列出的参数调用允许。
params.permit(:param_1, :param_2).merge(:sort => column, :direction => direction, :page => nil)
# OR
params.merge(:sort => column, :direction => direction, :page => nil).permit(:param_1, :param_2, :sort, :direction, :page)
如果您不知道链接中可以包含哪些参数,则可以调用request.parameters.merge(...)
(如本答案所述)或params.to_unsafe_h.merge(...)
。但是,正如注释中指出的那样,当将结果传递给link_to
时,这会带来安全风险,因为像host这样的参数将被解释为链接的实际主机,而不是查询参数。在link_to(url_for接受的所有内容以及:method)中,还有其他几个键也具有特殊含义,因此通常这是一种冒险的方法。