Добавить общее (не привязанное ни к ключу, ни к полю) сообщение об ошибке в rails FormObject - PullRequest
0 голосов
/ 03 октября 2018

У меня есть следующий класс ruby:

class MyFormObject < FormObject
  attribute :some_field

  validates :some_field, presence: true
  validate :my_custom_validation

  def my_custom_validation
    errors.add "Do_not_have_key","This error message is self contained, not linked to any field and no field prefix required"
  end
end

Я хотел бы выполнить свою собственную логику проверки.Добавьте ошибки в коллекцию ошибок, но некоторые из них не привязаны ни к какому ключу или полю.Допустим, они зависят от положения Луны в момент выполнения проверки:)

Также мне хотелось бы, чтобы кто-то еще использовал мой класс и звонил:

errors.full_messages

Чтобы получитьповедение по умолчанию добавления ключа ошибки перед всеми ошибками, ожидайте "общие" / "не привязанные к полю".

Есть ли элегантный способ добиться такого поведения?И закройте решение / обходной путь что-либо в этом классе, и все потребители не знают, что есть «специальные» ошибки?

1 Ответ

0 голосов
/ 03 октября 2018

В соответствии с документацией Rails здесь: https://guides.rubyonrails.org/active_record_validations.html#errors-base

Вы можете добавить сообщения об ошибках, которые относятся к состоянию объекта в целом, а не к определенному атрибуту.Вы можете использовать этот метод, когда хотите сказать, что объект недействителен, независимо от значений его атрибутов.Так как error [: base] - это массив, вы можете просто добавить к нему строку, и она будет использоваться в качестве сообщения об ошибке.

Так что в вашем случае ваш валидатор становится:

def my_custom_validation
  errors[:base] << "Your error message here."
end
...