Я пытаюсь вызвать пользовательский метод проверки, только если это новая запись или атрибут присутствует при обновлении.
validates :mobile_number, presence: {
message: 'Please provide your phone number.'
}, if: -> (user) { user.new_record? || !user.mobile_number.blank? }
Приведенный выше код работает и будет проверять только наличие мобильногономер в новой записи или если номер мобильного телефона пуст при вызове model.update (и т. д.).
validate :mobile_number_is_unique, if: -> (user) { user.new_record? || !user.mobile_number.blank? }
Приведенный выше код не работает и будет проверять уникальность номера мобильного телефона в новой записи ивсякий раз, когда вызывается model.update (и т. д.).Есть ли способ применить ту же логику к методу проверки, чтобы он не вызывался, когда номер мобильного телефона пуст, когда вызывается model.update (и т. Д.)?
mobile_number_is_unique
метод для дальнейшего контекста,
# Determines if the mobile number is unique.
def mobile_number_is_unique
return errors.add(
:mobile_number, 'Sorry, an account with that phone number already exists.'
) unless User.find_by(
mobile_number: PhonyRails.normalize_number(mobile_number)
).nil?
end
ОБНОВЛЕНИЕ
Самый простой способ выполнить:
validates :mobile_number, presence: {
message: 'Please provide your phone number.'
}, phony_plausible: {
message: 'Sorry, phone number format not recognized.'
}, uniqueness: {
message: 'Sorry, an account with that phone number already exists.'
}, if: -> (user) { user.new_record? || !user.mobile_number.blank? }
Использование метода validate: mobile_number_is_unique включил номер мобильного телефона в текущую модель и потребовался для его исключениячтобы пройти.