Являются ли следующие два условия проверки в Rails эквивалентными? Или нет?Различные условия проверки в Rails
if: :new_record?
on: :create
Являются ли следующие два условия проверки в Rails эквивалентными? Или нет?Различные условия проверки в Rails
if: :new_record?
on: :create
Они эквивалентны. on: :create
- это просто версия DSL, которая затем в конечном итоге преобразуется (в фоновом режиме) в if: :new_record
.
Подтверждает (ср валидация/validates.rb # L123) приводит нас к validates_with
(см валидаций/with.rb # L92), что приводит нас к validate
(ср validations.rb # L162), где мы можем увидеть on
становится if
:
if options.key?(:on)
options = options.dup
options[:if] = Array(options[:if])
options[:if].unshift ->(o) {
!(Array(options[:on]) & Array(o.validation_context)).empty?
}
end
это приводит нас к default_validation_context, которое эквивалентно if: :new_record?
def default_validation_context
new_record? ? :create : :update
end
Извините, это мой первый ответ, когда-либо здесь - если он запутан, дайте мне знать, и я постараюсь сделать его более ясным. Также я не мог добавить более двух ссылок, но если вы перейдете к исходному коду связанных релей, просто перейдите к файлам, которые я упомянул, чтобы вы могли найти код, о котором я упоминал. – lastgabs
Просто из любопытства, почему вы спрашиваете, заметили ли вы случаи, когда они не кажутся одинаковыми? – Iceman
Да, мне было интересно то же самое. И вы имеете в виду, что они эквивалентны практически, или они следуют буквально одному и тому же (или почти одинаковому) коду? –