验证模型属性的这两行之间有什么区别?
validates :last_name, :length => { :maximum => 32 }
validates :last_name, length: { maximum: 32 }
第一个使用:attribute =>
,第二个使用attribute:
。
答案 0 :(得分:1)
两者之间的区别在于定义键/值对的哈希的语法。这取决于您正在使用的Ruby版本。
Ruby 1.8和1.9 +都支持第一个:
:key => :value
第二个仅在Ruby 1.9+中受支持:
key: :value
如果您使用的是Ruby 1.9,则应该使用后者,因为它似乎是社区中的首选方式。我个人也认为它的代码更清晰。
但是有一点不同。除非你使用的是Ruby 2.2,否则当你的密钥是字符串时,你不能使用后者。这只适用于Ruby 2.2 +:
{ 'key': :value }
要在低于Ruby 2.2的任何东西中使用字符串作为键,你必须使用'hash rocket':
{ :'key' => 'value }
答案 1 :(得分:0)
没有区别,
{ symbol_key: value }
比
看起来更干净{ :symbol_key => value }
对于字符串键,你仍然需要使用" rocket"声明一个键的值,如下所示:
{ "string_key" => value }
事实上,如果你打开ruby控制台并输入
{ symbol_key: "value" }
它输出{ :symbol_key => "value" }
表明{ symbol_key: "value" }
转换为火箭语法,并且它只能看起来更好。