【问题标题】:Rails: Customize Validation Error Messages on Nested Form FieldsRails:自定义嵌套表单字段的验证错误消息
【发布时间】:2015-07-10 00:46:50
【问题描述】:

我有一个嵌套表单对象“所有者”,它正在创建一个用户和一个帐户。在 account.rb 中:

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

然后在我创建帐户的表单中,我有我的帐户字段,然后是 fields_for Owner。这一切正常,花花公子,并与所有者一起创建了一个帐户,但我想通过验证错误消息来增强用户体验。现在,将返回:

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

这些都很好,很正常,但这些都是我所担心的:

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

我所有的验证等等。

首先,我只想说“密码不能为空”、“名字不能为空”。基本上我不希望用户看到与“所有者”有关的任何内容。他们在表单上看不到它......前端没有说所有者,因此用户体验对于说所有者来说并不理想。它实际上只是后端的命名约定,我根本不希望我的用户考虑。称我为完美主义者,但是否可以从消息中删除嵌套对象并使其表现得好像它们都是同一模型的一部分?

另外,“用户无效”是什么意思?

【问题讨论】:

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


    【解决方案1】:

    我的验证错误由这段代码组成,我在整个应用程序中呈现为部分代码:

    <% 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,以便我可以操作该字段。我从字符串中删除了owner,并使其人性化和大写,只是删除了用户无效的情况。这给了我想要的格式良好、更好的用户体验。

    希望这对某人有所帮助。干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多