在 Ruby on Rails 教程第三版中(6.2 用户验证) 在编写一些测试时,书中有 ActiveRecord User 类的代码:
class User < ActiveRecord::Base
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: case_sensitive: false
end
最后一行( uniqueness: case_sensitive: false )抛出语法错误。
在线版本已更正为具有 {} : https://www.railstutorial.org/book/modeling_users至
uniqueness: { case_sensitive: false }
但我的问题是为什么最后一行会抛出错误?我认为最后一个哈希总是可以省略 {}?
最佳答案
它会抛出错误,因为以下语句不是有效的 Ruby 语句:
uniqueness: case_sensitive: false
应该是
{ uniqueness: { case_sensitive: false }}
将哈希传递给方法时,您可以省略 {}
。
call_method(foo: "bar")
call_method({ foo: "bar" })
但在您的情况下,情况完全不同:您正在定义一个包含诸如存在
、格式
、唯一性
等键的哈希。键唯一性
的值也应该是哈希
,但您没有正确定义它。
call_method(foo: { bar: "baz" }) # valid
call_method({ foo: { bar: "baz" }}) # valid
call_method(foo: bar: baz) # invalid
关于ruby-on-rails - Rails 4 何时不允许使用选项哈希(最后)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38041942/