在para_to中使用rails params.merge

我想在link_to块中添加一个URL参数。

代码当前 'renderChart', :class => "btn", :remote => true, :params => params.merge(:limit => 5) %>

但这给了我一个错误。

它将:class和:action添加到url参数中,而不仅仅是:limit。 为什么?

编辑:

我从另一个看起来像这样的链接添加其他URL参数

 link_to "Toggle Sort Direction",:action => 'renderChart', :remote => true, :params => {:sort => "desc"} 

因此,当用户单击其他链接时,我想将限制添加到url参数并保持排序参数

我终于设法自己找到了解决方案。

如果我只是这样做:params => {:limit => ..., :sort => params[:sort]}我得到了我需要的东西。 如果有一个排序参数,它会保持原样。

用这个

 <%= link_to "Submit",{ :action => 'renderChart', :remote => true, :limit => 5, :sort => "desc"}, :class => "btn" %> 

分离出html_optionsclass是一个html_option,所以最后传递它。

请参阅link_to文档。

UPDATE

根据OP在编辑EDIT部分的关注:

我从另一个看起来像这样的链接添加其他URL参数

 link_to "Toggle Sort Direction",:action => 'renderChart', :remote => true, :params => {:sort => "desc"} 

params :sort => "desc"用于Toggle Sort Direction链接,它们无法连接到Submit链接。 当您单击特定链接时,链接中指定的params将添加到params散列中。 因此,如果您需要在点击Submit链接时将:sort => "desc"作为params传递,然后明确指定它们,如上面的答案所示。

您需要明确地分离哈希:

 <%= link_to "Submit", { :action => 'renderChart', :class => "btn", :remote => true }, params.merge(:limit => 5) %> 

link_to拿出来你就有了一个隐式哈希(键值对),Ruby很聪明,知道你想要一个哈希:

 :action => 'renderChart', :class => "btn", :remote => true, params.merge(:limit => 5) 

但最后一件事 – 那不是一个键值对 – 它是一个哈希。 真的,你有这个:

 { :action => 'renderChart', :class => "btn", :remote => true, { ... } } 

如果你把Rails从混合中取出:

 { x: 'value', {} } 

而这根本不是一个有效的哈希:)