Rails 错误验证显示在字段下方

Rails Error Validations show below the Field

我想在其字段旁边使用 Rails 的错误消息。例如;

我有一个创建新用户的表单;

<h1>Sign up</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for(@user) do |f| %>
       <%= render 'shared/error_messages', object: f.object %>

      <%= f.label :name %>
      <%= f.text_field :name, class: 'form-control' %>

      <%= f.label :email %>
      <%= f.email_field :email, class: 'form-control' %>

      <%= f.label :password %>
      <%= f.password_field :password, class: 'form-control' %>

      <%= f.label :password_confirmation, "Confirmation" %>
      <%= f.password_field :password_confirmation, class: 'form-control' %>

      <%= f.submit "Create my account", class: "btn btn-primary" %>

    <% end %>
  </div>
</div>

我使用 _error_messages.html.erb 部分作为;

<% if object.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-danger">
      The form contains <%= pluralize(object.errors.count, "error") %>.
    </div>
    <ul>
    <% object.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>

我知道它只接受错误消息并将它们显示为列表。我认为应该有一种方法来检查每个字段的散列中的错误。只是不知道如何。

感谢您的帮助!

您可以创建一个辅助方法,它将当前对象和属性名称作为参数并生成必要的 html 以向字段显示错误 inline/next。喜欢

def errors_for(object, field_name)
  if object.errors.any? && object.errors.messages[field_name]
    object.errors.messages[field_name].join(', ')
  end
end

然后您可以简单地从您的表单中调用此辅助方法

  <%= f.label :email %>
  <%= f.email_field :email, class: 'form-control' %>
  <%= errors_for(@user, :email) %>