按特定顺序转发参数(使用link_to helper)

时间:2016-01-29 11:34:18

标签: ruby-on-rails ruby parameters

我想将参数从一个视图转发到另一个视图,这就是我设法做的事情。但我想按特定顺序传递这些参数。在第一次请求之后,在我发送表单后,我按照我想要的顺序获得了参数。例如:

= link_to "link text", some_specific_path(some_id, {"project_id"=>"1", "start_date"=>"2016-01-10", "end_date"=>"2016-01-20"})

然后,在视图中有了这些参数后,我以这种方式生成了一个link_to helper的链接:

http://www.example.com/someurl?end_date=2016-01-20project_id=1&start_date=2016-01-10

但是,该链接将生成为:

#if (arch(i386) || arch(x86_64)) && os(iOS) class SeededHTTPClient: HTTPClientProtocol { /// ... // } #endif

所以,问题是 - 当我发送表单时,参数会按照它们在表单中的显示顺序添加到网址中。但是,当您使用link_to helper和path helper生成链接时,无论它们实际出现的方式如何,都始终按字母顺序添加参数。

3 个答案:

答案 0 :(得分:1)

好的,我的解决方案,但它确实 urly

hash = {"project_id"=>"1", "start_date"=>"2016-01-10", "end_date"=>"2016-01-20"}
query_string = hash.map{|k,v| "#{k}=#{v}"}.join("&")
link_to "link text", some_specific_path(some_id) + "?" + query_string

答案 1 :(得分:1)

在这里定义一个帮助器是个好主意:

module ApplicationHelper
  def link_to_with_sorted_params(text, path, _params)
    prepared_params = _params.map { |k,v| "#{k}=#{v}" }.join("&")
    prepared_link = "#{path}?#{prepared_params}"

    link_to text, prepared_link
  end
end

称之为

=link_to_with_sorted_params("hi", users_path, {"user" => 1, "res" => 2})
#=> <a href="/users?user=1&amp;res=2">hi</a>

答案 2 :(得分:1)

是Rails bug https://github.com/rails/rails/issues/1146

另外,考虑在会话中的请求之间发送params。