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



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

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

改为循环访问错误条目:

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

旁白:在这种情况下考虑用户体验。用户可能会对表单上未显示的字段上的错误感到困惑。

相关内容

最新更新