我正试图从Codecademy的网站上了解这段代码:
Rails.application.routes.draw do
get '/' => 'pages#home'
resources :categories
get 'categories/:id/delete' => 'categories#delete', :as => :categories_delete
end
这是routes.rb
文件,代码首先指定它的对象是Rails应用程序,然后它背靠背调用三个方法!即application
,routes
和draw
。我将这些解释为方法因为句点语法,但只是将声音描绘成方法。
然后它使用get
指定应用程序的根,即应用程序打开时,应该路由到主页。我不确定为什么这个字符串的行为是pages#home
。
然后,我们调用resources
作为路线创建者。我们用符号:categories
指定路线。
我们得到符号categories_delete
指向的内容。然而,这个其他语法是什么意思?
get 'categories/:id/delete' => 'categories#delete', :as => . . .
答案 0 :(得分:0)
红宝石世界中常见的命名法(它可能来自其他语言,我不知道)是将实例方法编写为ClassName#instance_method_name
,这个简写已被借用于Rails路由方法,除了使用完整的类名(可能是CategoriesController
)之外,他们只使用控制器的低位名称,而不使用“Controller”后缀。
因此,pages#home
表示home
类中的PagesController
方法。
最终的get
方法形式不好,它正在创建一条路线,允许删除带有简单GET
请求的记录到/categories/123/delete
,其中123
将通过到CategoriesController
作为params[:id]
您可以在the excellent Rails Routing Guide找到更多关于这一切是如何运作的。
答案 1 :(得分:0)
所有这一切都是创建一个url帮助器,以便:
get 'categories/:id/delete' => 'categories#delete', :as => :category_delete
生成2个方法
category_delete_path
category_delete_url
两者之间的唯一区别是url还附加了主机和端口。
很抱歉编辑,完全搞砸了该网址的链接
答案 2 :(得分:0)
get - 是一个HTTP Verb,可以说是HTTP方法,具体取决于您执行的操作 当创建动作时它将被发布,在更新时它将被放置
:as option允许您覆盖指定路径助手的正常命名
所以categories#index
你可以说是categories_path
categories#delete
为categories_delete
categories/:id/delete
这会调用类别控制器,删除就是操作,并且id可以作为params[:id]
在控制器中以{id}来记录{/ 1}}记录
答案 3 :(得分:0)
只是为其他人已经发布的答案添加几点。
它背靠背调用三种方法!即
application
,routes
和draw
。我将这些解释为方法,因为句点语法,但只绘制声音像方法
这是正确的,这些是链中的3个方法,每个方法都调用从前一个方法返回的值。 Ruby中通常有一种约定,即保持方法名称非常简洁,例如Rails.application
将您的应用程序对象优先于Rails.get_application
我们正在“获取”category_delete指向的任何符号。然而,这个其他语法到底意味着什么?
get 'categories/:id/delete'
此get
方法未获取值,它为使用HTTP GET方法的请求定义路由。这里发生的是内部域特定语言用于定义路由。即,Ruby代码用于定义路由,但支持它的方法的命名方式使其成为用于定义路由的配置语言。
e.g。 get 'categories/:id/delete' => 'categories#delete'
代替类似的方法
define_route(http_method, path, action)