2014-04-08 49 views
1

我学习Ruby on Rails的,我无法理解该行:“获得'/患者/:身份证'这一行:'患者#显示',如:'患者'”是做什么的?

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

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

什么单冒号在字符串字面量平均值的情况下?我认为'get'函数解析它。
在'to'和'as'的情况下,单个冒号怎么办?其中,我没有线索。

,我读了一个冒号是指一个符号,但他们总是出现在下面的格式格式
:nospace_varname

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

非常感谢!

+1

在最新版本的Ruby中,'x:a'是':x => a'的简写形式。因此':'patient#show',因为'patient''是':to =>'patients#show',:as =>'patient''的简写。这是一个散列。 –

+0

嘿,事实证明你的问题有点令人困惑,因为人们认为你是在谈论字符串内的冒号,还是冒号被用作散列参数的一部分。你可能想澄清你实际上困惑的东西。 –

回答

5

下面的定义

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

生成作为路由:

patient GET /patients/:id(.:format)    patients#show 

其中

get:指的是HTTP方法

/patients/:id:将是m的路线像/patients/1一样高。 :id只是一个占位符。

to: 'patients#show':将路由映射到PatientsController

as: 'patient'show行动:将创建您的路线prefix。因此,您可以在应用程序中轻松访问它,如patient_urlpatient_path

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

to:as:的冒号去了,它们是必需的,因为这些是在get方法中传递的选项。如果密钥是符号那么:将被要求将其表示为符号

它可以使用任何方式,与新的Ruby(红宝石1。9及以上)的语法:

to: 'patients#show' 

或旧的Ruby语法为:

:to => 'patients#show' ## Using Hash Rocket 
+0

非常感谢。我知道它在做什么在概念上,语法把我扔了。 – user2316667

+0

原始海报对哈希语法感到困惑,与get方法本身无关。 –

+0

@Cupcake我详细解释了每个部分包含':id'的含义。看问题标题'该行'得到'/ patient /:id','patient#show',如:'patient''“呢?这就是为什么我解释了每个部分。 –

2

备用语法。

get('/patients/:id', { :to => 'patients#show', :as => 'patient' }) 

get是一个方法调用。第一个参数是一个String。第二个参数是一个哈希

+0

非常好。我甚至不知道这些箭头是不必要的。稍后再接受。 – user2316667

+0

@ user2316667请记住,它取决于您的Ruby版本。较旧的版本将不具有此快捷键语法。 –

+0

所以事实证明,原来的海报正在谈论这个***冒号:''/患者/:id''。虽然有点混乱,但我认为他也在讨论哈希参数。 –

2

什么单冒号在字符串字面量平均值的情况下?我认为'get'函数解析它。

这是一个用于命名查询参数的rails约定。至于路由如何工作,你应该阅读Rails Routing Guide

在“to”和“as”的背景下,单个冒号怎么办?其中,我没有线索。

这是散列的ruby语法。欲了解更多信息,请参阅Ruby Hash docs

hash = foo: "bar", hello: "world" 
# {foo: "bar", hello: "world"} 
+0

所以原来的海报正在谈论***这个冒号:''/ patients /:id''。虽然有点混乱,但我认为他也在讨论哈希参数。 –

+0

哦,男孩,实际上,事实证明,OP是问两个!我的坏:/ –

+0

我以为我回答了两个,虽然...'v.v' – naomik

1

get '/patients/:id'结肠是一个简单的占位符,并且是指将在那里放置在你的URL来标识要请求的病人Patient对象的属性。因此,当您重定向到patient_path,患者id的值为5时,您将获得此URL:yourpage.com/patients/5

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

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