Rails 3 link_to添加多个动态参数

时间:2014-02-21 22:36:20

标签: ruby-on-rails

在Rails 3.2.16中,我已经设置了一条路径,用#show显示一个带有强制动态参数的联系人。如果未指定参数,则另一个路由包括重定向默认值。

路由rb (已编辑以显示resources行)

resources :contacts, :except => :show
match 'contacts/:id' => redirect("/contacts/%{id}/from"), :via => "get"
match 'contacts/:id/:category' => 'contacts#show',
  :via => "get",
  :constraints => { :category => /from|to|about/ }

link_to "From", contact_path(@contact, :category => "to")

生成此链接:

http://0.0.0.0:3000/contacts/1?category=to

换句话说,它正确地将:id转换为路径的一部分,但然后将category作为单独的参数附加。默认路由会看到没有:category的路径,并将其重定向回/contacts/1/from

如何编写将生成此HTML的link_to

http://0.0.0.0:3000/contacts/1/to

2 个答案:

答案 0 :(得分:1)

在您的routes.rb中:

match 'contacts/:id/:category', :to => 'contacts#show',
    :via => "get",
    :constraints => { :category => /from|to|about/ },
    :as => :something

然后你打电话

link_to "From", something_path(@contact, "to")

答案 1 :(得分:0)

Stavros的回答有效,可能是最好的解决方案。作为另一种选择,我意识到contact_path(@contact)只是返回一个字符串,所以没有对routes.rb进行任何修改,我可以写

link_to "From", contact_path(@contact) + "/to"