以下/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
但是,如果我们直接在get
块内声明resources
或其他路由,这将also创建相同的member
路由,除了resource id
值将在params[:animal_id]
中而不是[ C0]。路由助手也会从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
选项用get
值写on:
路由,则将其与成员块路由相同
:member