我有一个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) %>
它有效,但我不明白为什么!
答案 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
匹配。