这条线是什么" get' / patients /:id',to:'患者#show',as:' patient' "做?

时间:2014-04-08 16:00:56

标签: ruby-on-rails ruby

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

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

get '/patients/:id', to: 'patients#show', as: 'patient'

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

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

从本质上讲,这是一个语法问题。

非常感谢!

4 个答案:

答案 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'。因此,您可以在应用程序中轻松访问prefixpatient_url

当您以patient_path访问此路径时,其中@patient是患者记录的实例,其id = 1。然后生成的路线为patient_path(@patient):id 将与/patients/1映射。

@patient.idto:中的冒号为止,它们是必需的,因为这些是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

下一部分确实是Hashto部分表示show(控制器)中的patients方法将被调用以执行。 as部分只是一个别名,因此您可以更好地访问代码中的路径。如果您将其称为'somepatient',则可以使用somepatient_path帮助程序访问它。

来自这两个值的冒号只是源于哈希。它是(较旧的)to => 'patient#show', as => 'patient'的替代语法,而在这种情况下可以省略用于散列的周围花括号,因为散列是调用的最后一个参数,否则它可能是不明确的。