我有一个简单的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>
答案 0 :(得分:1)
您的代码无法按预期运行的原因是因为它希望@accounts.errors.each
将属性/消息对传递给给定的块。但是,仅传递属性名称,不传递消息。在您的情况下,为err
分配了值:name
,而不是像[:name, "is invalid"]
这样的值。
改为遍历错误条目:
@account.errors.entries.each { |err| @account_form.errors.add(*err) }
此外:在这种情况下,请考虑UX。用户可能会困惑于看到表单上未显示的字段上的错误。