符号是不可变对象,是轻量级字符串,不可垃圾收集。我不明白他们如何在Rails路由或路径中工作。例如,在:
get '/patients/:id', to: 'patients#show'
:id
将替换为数字,我们会得到类似/patitent/1
的内容。但是不允许:id = 1
。这项任务是如何进行的?
答案 0 :(得分:1)
值'/patients/:id'
是一个普通的Ruby字符串,虽然:id
部分看起来像一个符号,但它不是。
当Rails分析字符串时,它使用冒号来标识路径中的参数名称。当它从接收GET /patients/1
之类的请求设置参数时,它不会尝试更改符号值,但会执行以下操作
params[:id] = '1'
注意我并非100%确定不会在此处使用字符串"id"
作为关键字。但无论哪种方式,您都可以看到它不会改变任何符号值,只是使用符号的名称,这样您就知道它将存储在params Hash
作为网址参数定义的一部分的':id'
与使用Symbol
文字:id
时的相似性可能令人困惑,但是在机架路径处理中共享的设计选择引擎所以大多数Ruby Web框架使用相同的样式。