Rails:在嵌套表单字段

时间:2015-07-10 00:46:51

标签: ruby-on-rails validation nested-attributes

我有一个嵌套的表单对象" Owner"即创建用户和帐户。在account.rb中:

belongs_to :owner, class_name: "User"
has_many :users
accepts_nested_attributes_for :owner

然后在我创建帐户的表单中,我有我的帐户字段,然后是fields_for所有者。这样做很好,花花公子并与所有者一起创建帐户,但我想通过验证错误消息来增强用户体验。现在,意志将回归:

  • (帐户属性)不能为空
  • (其他帐户属性)不能为空

哪些都很好而且很正常,但这些就是我的意思:

  • 用户无效
  • 所有者密码不能为空
  • 所有者密码太短(最少6个字符)
  • 所有者名字不能为空

等我所有的验证等等。

首先,我只是想说它"密码不能为空白","名字不能为空。"基本上我不希望用户看到任何与"所有者"有关的事情。他们没有在表格上看到它...前端没有任何东西说所有者,所以用户体验不太理想,因为它说所有者。它实际上只是后端的命名约定,我根本不想让用户思考。称我为完美主义者,但是是否可以从邮件中删除嵌套对象并使其表现得好像它们都是同一模型的一部分?

此外,"用户提供的内容无效"?

1 个答案:

答案 0 :(得分:0)

我的验证错误包含此代码,我在整个应用程序中将其呈现为部分代码:

<% if validation_errors.errors.any? %>
  <div class="alert alert-danger alert-dismissable">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <i class="icon-notice"></i>
    <b>Please correct the following errors:</b>
    <ul>
      <% validation_errors.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
    </ul>
  </div>
<% end %>

对于这种特殊情况,我必须对此进行如下修改:

<% if @account.errors.any? %>
  <div class="alert alert-danger alert-dismissable">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <i class="icon-notice"></i>
    <b>Please correct the following errors:</b>
    <ul>
      <% @account.errors.delete(:users) %>
      <% @account.errors.each do |field, msg| %>
        <li><%= field.to_s.sub('owner.', '').humanize.capitalize %> <%= msg %></li>
      <% end %>
    </ul>
  </div>
<% end %>

所以你可以看到不同的地方:我使用的是errors.field,而是使用errors.msg,而不是errors.full_messages,以便我可以操作字段。我从字符串中删除了所有者并使其人性化并大写,并且刚删除用户的情况无效。这给了我一个格式良好,更好的用户体验。

希望这有助于某人。欢呼声。