Ruby on rails 这些语法之间有什么区别?
验证模型属性时,这两行之间有什么区别Ruby on rails 这些语法之间有什么区别?,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,验证模型属性时,这两行之间有什么区别 validates :last_name, :length => { :maximum => 32 } validates :last_name, length: { maximum: 32 } 第一个使用:attribute=>,第二个使用attribute:两者之间的区别在于定义键/值对散列的语法。这取决于您使用的Ruby版本 第一个在Ruby 1.8和1.9+中都受支持: :key => :value 第二个仅在Ruby 1.9
validates :last_name, :length => { :maximum => 32 }
validates :last_name, length: { maximum: 32 }
第一个使用
:attribute=>
,第二个使用attribute:
两者之间的区别在于定义键/值对散列的语法。这取决于您使用的Ruby版本
第一个在Ruby 1.8和1.9+中都受支持:
:key => :value
第二个仅在Ruby 1.9+中受支持:
key: :value
如果您使用的是Ruby1.9,您可能应该使用后者,因为它似乎是社区中的首选方式。我个人也认为它的代码更干净
不过有一点不同。如果密钥是字符串,则不能使用后者,除非您使用的是Ruby 2.2。这只适用于Ruby 2.2+:
{ 'key': :value }
要在Ruby 2.2以下版本中使用字符串作为键,必须使用“哈希火箭”:
{ :'key' => 'value }
没有区别,
{ symbol_key: value }
只是看起来比我干净
{ :symbol_key => value }
对于字符串键,仍然需要使用“火箭”来声明键的值,如下所示:
{ "string_key" => value }
事实上,如果打开ruby控制台并键入
{ symbol_key: "value" }
它输出
{:symbol\u key=>“value”}
建议将{symbol\u key:“value”}
转换为火箭语法,它只是为了看起来更好。第二种是从Ruby版本1.9开始表示哈希值的新方法。您显示的两个示例的行为应该相同。旧方法(您的第一种)似乎没有被弃用,因此两者都可以使用。编辑:刚刚清理了答案的格式