理解Ruby符号

时间:2015-07-09 11:18:19

标签: ruby

符号是不可变对象,是轻量级字符串,不可垃圾收集。我不明白他们如何在Rails路由或路径中工作。例如,在:

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

:id将替换为数字,我们会得到类似/patitent/1的内容。但是不允许:id = 1。这项任务是如何进行的?

1 个答案:

答案 0 :(得分:1)

'/patients/:id'是一个普通的Ruby字符串,虽然:id部分看起来像一个符号,但它不是。

当Rails分析字符串时,它使用冒号来标识路径中的参数名称。当它从接收GET /patients/1之类的请求设置参数时,它不会尝试更改符号值,但会执行以下操作

params[:id] = '1'

注意我并非100%确定不会在此处使用字符串"id"作为关键字。但无论哪种方式,您都可以看到它不会改变任何符号值,只是使用符号的名称,这样您就知道它将存储在params Hash

作为网址参数定义的一部分的':id'与使用Symbol文字:id时的相似性可能令人困惑,但是在机架路径处理中共享的设计选择引擎所以大多数Ruby Web框架使用相同的样式。