在para_to中使用rails params.merge

时间:2014-03-28 16:42:41

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试在link_to块中添加一个URL参数。

目前的代码<%= link_to "Submit", :action => '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并保留sort params

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

使用此

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

单独列出html_optionsclass是一个html_option,所以最后传递它。

请参阅 link_to 文档。

<强>更新

根据OP在问题的编辑部分中的关注:

  

我从另一个看起来像这个

的链接中添加了其他URL参数
link_to "Toggle Sort Direction",:action => 'renderChart', :remote => true, :params => {:sort => "desc"}

参数:sort => "desc"用于Toggle Sort Direction链接,但无法连接到Submit链接。当您单击特定链接时,链接中指定的参数将添加到params哈希。因此,如果您在点击:sort => "desc"链接时需要将Submit作为参数传递,请在上面的回答中明确指出明确

答案 2 :(得分:-1)

您需要明确区分哈希值:

<%= 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', {} }

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