使用url_for查询参数?

时间:2011-02-17 16:19:55

标签: ruby-on-rails ruby-on-rails-3 query-parameters url-for

url_for([:edit, @post])

正在工作并生成/comments/123/edit。现在我需要添加一个查询参数,以代替

/comments/123/edit

它是

/comments/123/edit?qp=asdf

我尝试了url_for([:edit, @post], :qp => "asdf"),但没有去。

4 个答案:

答案 0 :(得分:29)

使用命名路线。

edit_post_path(@post, :qp => "asdf")

答案 1 :(得分:20)

您可以使用polymorphic_path

polymorphic_path([:edit, @post], :qp => 'asdf')

答案 2 :(得分:12)

答案 3 :(得分:10)

来自Simone Carletti的answer确实有效,但有时候人们想要使用Rails路由指南中描述的对象构建URL,而不是依赖_path帮助器。

来自BenSwards的答案都试图准确描述如何执行此操作,但对我来说,使用的语法会导致错误(使用Rails 4.2.2,它具有相同的行为如4.2.4,这是本回答中的当前稳定版本。)

在传递参数的同时创建来自对象的URL /路径的正确语法应该是,而不是嵌套数组,而是包含URL组件的平面数组,以及作为最终元素的哈希:

url_for([:edit, @post, my_parameter: "parameter_value"])

这里将前两个元素解析为URL的组件,并将哈希视为URL的参数。

这也适用于link_to

link_to( "Link Text", [:edit, @post, my_parameter: "parameter_value"])

当我根据Ben& amp; amp; amp; Swards:

url_for

我收到以下错误:

url_for([[:edit, @post], my_parameter: "parameter_value"])

该跟踪显示,此ActionView::Template::Error (undefined method 'to_model' for #<Array:0x007f5151f87240>)来自polymorphic_routes.rbActionDispatch::Routing来自url_forrouting_url_for.rb):

ActionView::RoutingUrlFor

问题是,它期望一个URL组件数组(例如符号,模型对象等),不是包含另一个数组的数组。

gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:297:in `handle_list' gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:206:in `polymorphic_method' gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:134:in `polymorphic_path' gems/actionview-4.2.2/lib/action_view/routing_url_for.rb:99:in `url_for' 查看相应的code,我们可以看到,当它收到一个以哈希作为最终元素的数组时,它将extract哈希并视为参数,然后只留下带有URL组件的数组。

这就是为什么带有散列作为最后一个元素的平面数组工作,而嵌套数组不起作用。