ruby-on-rails - Rails 4 何时不允许使用选项哈希(最后)?

标签 ruby-on-rails ruby hash syntax-error railstutorial.org

在 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/

相关文章:

ruby-on-rails - rails solr 搜索限制总搜索结果/获得固定数量的结果

ruby - 将文件中的 'right' 替换为 'left',将 'left' 替换为 'right'

ruby - 是否有一种简单的方法来检查 Ruby IO 实例是否会阻塞 read()?

ruby - 尝试使用 Ruby 中的字符串值引用哈希

php - 如何有效地同时哈希多个密码?

html - rails form_tag _path 参数

ruby-on-rails - 使用 VirtualBox 从访客访问主机上的站点?主机和访客都是linux

ruby-on-rails - Ruby on Rails API 安全性

ruby - Ruby 中是否有类似于 Pascal 记录的数据结构?

javascript - ajax 哈希导航无法正常工作