[英]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路由,都被认为是成员路由。
它是区分两条路线的铁路惯例。 如果我们编写成员块,则认为在该块中声明的所有路由都是从成员块中显式声明的。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.