Aut*_*ico 7 ruby ruby-on-rails colon
在红宝石中附加和预先添加结肠有什么区别?
例:
#In rails you often have things like this:
has_many :models, dependent: :destroy
Run Code Online (Sandbox Code Playgroud)
为什么dependent:有一个附加的结肠,但:models和:destroy有预谋的结肠?有什么不同?
aka*_*tos 10
这是Ruby 1.9中的一种新语法,用于定义作为哈希中键的符号.
前置和附加都:定义了a symbol,但后者仅在散列初始化期间有效.
您可以将符号视为轻量级字符串常量.
它相当于
:dependent => :destroy
Run Code Online (Sandbox Code Playgroud)
在1.9之前,使用稍微更冗长和难以键入的语法定义哈希:
hash = {
:key => "value",
:another_key => 4
}
Run Code Online (Sandbox Code Playgroud)
他们在1.9中简化了它:
hash = {
key: "value",
another_key: 4
}
Run Code Online (Sandbox Code Playgroud)
如果您要编写要在1.9之前的Ruby上使用的模块,请确保使用较旧的语法.
由于Ruby允许你省略括号(),在某些情况下允许花括号,{}它可能不是很明显,但上面的代码实际上是这样的:
has_many(:models, { dependent: :destroy } )
现在,它意味着has_many需要两个参数,一个是符号:,一个是不可变的字符串,如果你愿意,还有一个哈希,其中dependent键destroy是键,是值; 也可能被视为:dependent => destroy.