Rails:直接在 `resources` 块内声明路由与用 `member` 块包围它之间的区别
Rails: Difference between declaring a route directly inside the `resources` block vs. enclosing it with a `member` block
下面的/animals/:animal_id/info(.:format)
和/animals/:id/info(.:format)
路由除了参数名有什么区别?为什么参数名称不同?
config/routes.rb
Rails.application.routes.draw do
resources :animals do
get 'info'
member do
get 'info'
end
end
end
~/myrails>rails routes
Prefix Verb URI Pattern Controller#Action
animal_info GET /animals/:animal_id/info(.:format) animals#info
info_animal GET /animals/:id/info(.:format) animals#info
首先,如果我们写member
块或者直接在resources
里面写get路由,都被认为是成员路由。
这是区分两条路线的 rails 惯例。如果我们编写成员块,则认为在该块中声明的所有路由都是从成员块中显式声明的。
resources :animals do
member do
get 'info'
end
end
info_animal GET /animals/:id/info(.:format) animals#info
但是如果我们直接在 resources
块内声明 get
或其他路由,这将 也 创建相同的 member
路由,除了resource id
值将在 params[:animal_id]
而不是 params[:id]
中可用。路由助手也将从 info_animal_url
和 info_animal_path
重命名为 animal_info_url
和 animal_info_path
。我认为这是为了区分请求不是来自 member
块。
resources :animals do
get 'info'
end
animal_info GET /animals/:animal_id/info(.:format) animals#info
如果我们直接在资源中使用 on:
选项和值 :member
编写 get
路由,那么这将被视为与成员块路由相同
resources :animals do
get 'info', on: :member
end
info_animal GET /animals/:id/info(.:format) animals#info
下面的/animals/:animal_id/info(.:format)
和/animals/:id/info(.:format)
路由除了参数名有什么区别?为什么参数名称不同?
config/routes.rb
Rails.application.routes.draw do
resources :animals do
get 'info'
member do
get 'info'
end
end
end
~/myrails>rails routes
Prefix Verb URI Pattern Controller#Action
animal_info GET /animals/:animal_id/info(.:format) animals#info
info_animal GET /animals/:id/info(.:format) animals#info
首先,如果我们写member
块或者直接在resources
里面写get路由,都被认为是成员路由。
这是区分两条路线的 rails 惯例。如果我们编写成员块,则认为在该块中声明的所有路由都是从成员块中显式声明的。
resources :animals do
member do
get 'info'
end
end
info_animal GET /animals/:id/info(.:format) animals#info
但是如果我们直接在 resources
块内声明 get
或其他路由,这将 也 创建相同的 member
路由,除了resource id
值将在 params[:animal_id]
而不是 params[:id]
中可用。路由助手也将从 info_animal_url
和 info_animal_path
重命名为 animal_info_url
和 animal_info_path
。我认为这是为了区分请求不是来自 member
块。
resources :animals do
get 'info'
end
animal_info GET /animals/:animal_id/info(.:format) animals#info
如果我们直接在资源中使用 on:
选项和值 :member
编写 get
路由,那么这将被视为与成员块路由相同
resources :animals do
get 'info', on: :member
end
info_animal GET /animals/:id/info(.:format) animals#info