Ruby on Rails: есть ли способ определить, какие поля не прошли валидацию в ActiveRecord? - PullRequest
0 голосов
/ 25 апреля 2010

Я пытаюсь создать файл XML-компоновщика, который говорит пользователю точно знать, какие поля не прошли проверку в выходных данных. Я также хочу отобразить их входные данные обратно, поэтому мне нужно выяснить, какие поля не прошли проверку. То есть, если кому-то не удается создать новый пользовательский ресурс, я хочу отобразить значимый XML (помимо значимого номера статуса HTTP), например:

<errors>
    <user>
        <email>bad@email: Invalid email format</email>
    </user>
<errors>

Вышесказанное сложно сделать в файле XML Builder, не зная, какое поле не удалось. И если я просто переберу сообщения об ошибках, я не буду знать, как проверить мой объект @user, чтобы получить значение, предоставленное пользователем.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2010

Прямо из API документов :

company.errors.each{|attr,msg| puts "#{attr} - #{msg}" } # =>
  name - is too short (minimum is 5 characters)
  name - can't be blank
  address - can't be blank

Разве это не то, что вы ищете: переменная attr будет именем поля.

0 голосов
/ 25 апреля 2010

Использование ActiveRecord::Errors#on

company = Company.create(:address => '123 First St.')
company.errors.on(:name)      # => ["is too short (minimum is 5 characters)", "can't be blank"]
company.errors.on(:email)     # => "can't be blank"
company.errors.on(:address)   # => nil

Или вы можете использовать ActiveRecord::Errors#each, чтобы получить все атрибуты с ошибками

company = Company.create(:address => '123 First St.')
company.errors.each{|attr,msg| puts "#{attr} - #{msg}" }
# => name - is too short (minimum is 5 characters)
#    name - can't be blank
#    address - can't be blank
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...