当属性不存在时,将错误合并到我的自定义account_form中会导致错误

时间:2018-09-28 20:06:34

标签: ruby-on-rails

我有一个简单的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

提交表单后,我然后使用电子邮件,密码,company_name值创建其他模型,例如帐户,用户等。我将所有这些都放在事务中。

现在,当这些其他模型中存在验证错误时,我正在尝试将其合并到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 :(得分:1)

您的代码无法按预期运行的原因是因为它希望@accounts.errors.each将属性/消息对传递给给定的块。但是,仅传递属性名称,不传递消息。在您的情况下,为err分配了值:name,而不是像[:name, "is invalid"]这样的值。

改为遍历错误条目:

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

此外:在这种情况下,请考虑UX。用户可能会困惑于看到表单上未显示的字段上的错误。