这个 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
.
我有一个 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
.