Слияние ошибок в моей пользовательской форме account_form вызывает ошибки, когда свойства не существуют - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть простая модель account_form.rb, которую я использую для пользователей, которые регистрируются:

class AccountForm
  include ActiveModel::Model
  include ActiveModel::Validations

  attr_accessor :company_name, :email, :password
  validates_presence_of :company_name, :email, :password  
end

После отправки формы я затем использую значения email, password, company_name для создания других моделей, таких как account, user,и т. д. У меня есть все это в транзакции.

Теперь, когда в других моделях есть ошибки проверки, я пытаюсь объединить их в модель account_form, но получаю ошибку, когда реквизиты модели не совпадают:

NoMethodError (undefined method `name' for #<AccountForm:0x00007fbfb9bae5c0>):

Например, я сливаюсь следующим образом, когда проверка не проходит:

@account.errors.each { |err| @account_form.errors.add(*err) }

Есть ли способ передать эти ошибки в представление, даже если они не существуют вмодель account_form?

Я отображаю ошибки вроде:

   <ul>  
     <% @account_form.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>  
     <% end %> 
   </ul>

1 Ответ

0 голосов
/ 29 сентября 2018

Причина, по которой ваш код не работает должным образом, заключается в том, что он ожидает @accounts.errors.each передачи пар атрибут / сообщение в указанный блок.Однако передается только имя атрибута, , а не сообщение.В вашем случае err присваивается значение :name, а не что-то вроде [:name, "is invalid"].

Вместо этого перебирайте записи об ошибках:

@account.errors.entries.each { |err| @account_form.errors.add(*err) }

В сторону: рассмотрим UX в этомдело.Пользователь, вероятно, будет смущен, увидев ошибки в полях, которые не отображаются в форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...