这个 Rails 路由是如何工作的?

How is this Rails routing working?

我有一个 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) %>

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

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

当您使用 as: 时,您正在定义一个 命名的 路径,该路径获得关联的辅助方法。

助手的全部意义在于填写路线中的"blanks"。您的路线 /shop/:username 有一个空白 :username。因此,您传递给 shop_path 的第一个参数被填充为 :username 变量。

假设您的 user.username"john"

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