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

时间:2015-05-28 18:06:51

标签: ruby-on-rails ruby error-handling partial

我想在其Fields旁边使用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 %>

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以创建一个辅助方法,该方法将当前对象和属性名称作为参数,并生成必要的html以显示内联/字段旁边的错误。像

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) %>