Когда варианты хэшей (в конце) не разрешены в рельсах 4?
В Ruby on Rails Tutorial 3rd Edition (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
Последняя строка (уникальность: case_sensitive: false) выдает синтаксическую ошибку.
В онлайн-версии для этого исправлено наличие {}: https://www.railstutorial.org/book/modeling_users
uniqueness: { case_sensitive: false }
Но мой вопрос в том, почему последняя строка выдает ошибку? Я думал, что последний хэш всегда мог опустить {}?
Я думаю, вы можете просто опустить "один уровень" хэш-фигур.
Итак, здесь:
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX }
второй аргумент метода validates
- фактически хэш. Вы можете визуализировать его так:
validates(:email, { presence: true, length: { maximum: 255 } })
Если у вас есть вложенная структура хэша (как вы здесь), и вы уже опускаете скобки для хэша верхнего уровня, то вы не можете опустить их для вложенного.
Однако в Coffeescript вы можете сделать это (что я считаю аккуратным)
Он выдает ошибку, потому что следующий оператор не является корректным выражением Ruby:
uniqueness: case_sensitive: false
Должен быть
{ uniqueness: { case_sensitive: false }}
При передаче хэша методу вы можете опустить {}
.
call_method(foo: "bar")
call_method({ foo: "bar" })
Но в вашем случае это совершенно другое: вы определяете хэш, содержащий ключи, такие как presence
, format
, uniqueness
. Значение ключевой uniqueness
должно быть Hash
, но вы не определяете его должным образом.
call_method(foo: { bar: "baz" }) # valid
call_method({ foo: { bar: "baz" }}) # valid
call_method(foo: bar: baz) # invalid
- Вопросы
- Railstutorial.org
- Когда варианты хэшей (в конце) не разрешены в рельсах 4?