我有一个简单的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) }
旁白:在这种情况下考虑用户体验。用户可能会对表单上未显示的字段上的错误感到困惑。