这个Rails路由如何工作?

时间:2015-01-03 19:33:50

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个link_to可以创建domain.com/shopname之类的路径。它看起来像这样:

的routes.rb

get 'shop/:username' => 'users#profile'

index.html.erb

<%= link_to user.shop_name, user.username %>

但是,我希望路径为domain.com/shops/shopname,我最终得到了这个:

的routes.rb

get 'shop/:username' => 'users#profile', :as => :shop

index.html.erb

<%= link_to user.shop_name, shop_path(user.username) %>

它有效,但我不明白为什么!

1 个答案:

答案 0 :(得分:2)

假设您了解路由的工作原理......

当您使用as:时,您正在定义名为的路径,该路径会获得相关的辅助方法。

帮助者的全部意义在于填补&#34;空白&#34;在一条路线。您的路线/shop/:username只有一个空白:username。因此,传递给shop_path的第一个参数将填入:username变量。

假设您的user.username"john"

在之前它没有工作,因为你只是将一个字符串转储到link_to,这会吐出像/john这样的路径。这显然不会与/shop/:username匹配。当您将"john"提交给shop_path时,它会向{1}}吐出,与路由/shop/john匹配。