我正在铁轨上学习红宝石,我无法理解这条线:
摘自http://guides.rubyonrails.org/routing.html:
get '/patients/:id', to: 'patients#show', as: 'patient'
字符串文字上下文中的单冒号是什么意思?我认为'get'函数解析它 在'to'和'as'的上下文中单个冒号怎么样?其中,我没有任何线索。
我读到单冒号指的是符号,但它们总是以下列格式显示 :nospace_varname
从本质上讲,这是一个语法问题。
非常感谢!
答案 0 :(得分:5)
以下定义
get '/patients/:id', to: 'patients#show', as: 'patient'
生成一条路线:
patient GET /patients/:id(.:format) patients#show
,其中
get
:指HTTP方法
/patients/:id
:将匹配/patients/1
之类的路线。 :id
只是一个占位符。
to: 'patients#show'
:将路线映射到show
的{{1}}行动
PatientsController
:将为您的路线创建as: 'patient'
。因此,您可以在应用程序中轻松访问prefix
或patient_url
。
当您以patient_path
访问此路径时,其中@patient是患者记录的实例,其id = 1。然后生成的路线为patient_path(@patient)
。 :id 将与/patients/1
映射。
到@patient.id
和to:
中的冒号为止,它们是必需的,因为这些是get方法中传递的选项。它们作为哈希传递,并根据哈希的Ruby语法传递,如果键是符号,则需要as:
将其表示为符号。
它可以以任何一种方式使用,使用新的Ruby(Ruby 1.9及更高版本)语法:
:
或使用旧的Ruby语法:
to: 'patients#show'
答案 1 :(得分:2)
另一种语法。
get('/patients/:id', { :to => 'patients#show', :as => 'patient' })
get是一个方法调用。第一个参数是String。第二个参数是哈希
答案 2 :(得分:2)
字符串文字上下文中的单冒号是什么意思?我认为'get'函数解析它。
这是用于命名查询参数的rails约定。至于路由如何在rails中工作,您应该阅读Rails Routing Guide。
在'to'和'as'的上下文中,单个冒号怎么样?其中,我没有任何线索。
这是哈希的ruby语法。有关详细信息,请参阅Ruby Hash docs
hash = foo: "bar", hello: "world"
# {foo: "bar", hello: "world"}
答案 3 :(得分:1)
get '/patients/:id'
中的冒号只是一个占位符,并引用Patient
对象的属性,该对象将放置在您的URL中以标识要请求的患者。因此,当您重定向到患者patient_path
值为5的id
时,您会收到以下网址:yourpage.com/patients/5
。
下一部分确实是Hash
。 to
部分表示show
(控制器)中的patients
方法将被调用以执行。 as
部分只是一个别名,因此您可以更好地访问代码中的路径。如果您将其称为'somepatient'
,则可以使用somepatient_path
帮助程序访问它。
来自这两个值的冒号只是源于哈希。它是(较旧的)to => 'patient#show', as => 'patient'
的替代语法,而在这种情况下可以省略用于散列的周围花括号,因为散列是调用的最后一个参数,否则它可能是不明确的。