线路"得到'/病人/:id'到:'病人#show',as:'病人'"怎么办?

use*_*667 1 ruby ruby-on-rails

我正在铁轨上学习红宝石,我无法理解这条线:

摘自http://guides.rubyonrails.org/routing.html:

get '/patients/:id', to: 'patients#show', as: 'patient'
Run Code Online (Sandbox Code Playgroud)

字符串文字上下文中的单个冒号是什么意思?我认为'get'函数解析它.
在'to'和'as'的上下文中单个冒号怎么样?对此,我没有任何线索.

我读到单冒号指的是符号,但它们总是以下列格式显示
:nospace_varname

实质上,这是一个语法问题.

非常感谢!

Kir*_*rat 5

以下定义

get '/patients/:id', to: 'patients#show', as: 'patient'
Run Code Online (Sandbox Code Playgroud)

生成一条路线:

 patient GET    /patients/:id(.:format)              patients#show
Run Code Online (Sandbox Code Playgroud)

哪里

get :指HTTP方法

/patients/:id:将是匹配的路线/patients/1.:id只是一个占位符.

to: 'patients#show':将路线映射到show行动PatientsController

as: 'patient':将为prefix您的路线创建一个.因此,您可以在应用程序中轻松访问它patient_urlpatient_path.

当您访问此路径时patient_path(@patient),@ Patient是一个id = 1的Patient记录实例.然后生成的路线将是/patients/1.:id将映射为@patient.id.

就在结肠to:as:云,他们被要求因为这些都是GET方法传递的选项.它们作为哈希传递,并且根据哈希的Ruby语法传递,如果key是符号,:需要将其表示为符号.

它可以以任何一种方式使用,使用新的Ruby(Ruby 1.9及更高版本)语法:

to: 'patients#show'
Run Code Online (Sandbox Code Playgroud)

或者使用旧的Ruby语法:

:to => 'patients#show'   ## Using Hash Rocket
Run Code Online (Sandbox Code Playgroud)