我有以下表格
- <%= form_for(@user) do |f| %>
- <% if @user.errors.any? %>
- <div id="error_explanation">
- <h2><%= pluralize(@user.errors.count,"error") %> prohibited this user from being saved:</h2>
- <ul>
- <% @user.errors.full_messages.each do |message| %>
- <li><%= message %></li>
- <% end %>
- </ul>
- </div>
- <% end %>
- <%= @user.errors.messages[:name] %>
- <div class="field">
- <%= f.label :name %><br>
- <%= f.text_field :name %>
- </div>
- <div class="field">
- <%= f.label :email %><br>
- <%= f.text_field :email %>
- </div>
- <div class="field">
- <%= f.label :password %><br>
- <%= f.password_field :password %>
- </div>
- <div class="field">
- <%= f.label :phone %><br>
- <%= f.text_field :phone %>
- </div>
- <div class="actions">
- <%= f.submit %>
- </div>
- <% end %>
我想为它下面的每个字段显示表单错误,而不是顶部的所有字段.经过rails guide,但无法知道如何做到这一点.
解决方法
您可以编写帮助程序以返回任何对象的任何字段的错误消息
在/app/helpers/application_helper.rb中:
- def show_errors(object,field_name)
- if object.errors.any?
- if !object.errors.messages[field_name].blank?
- object.errors.messages[field_name].join(",")
- end
- end
- end
在视图文件中:
- <div class="field">
- <%= f.label :name %><br>
- <%= f.text_field :name %>
- <p class='error'><%= show_errors(@user,:name) %></p>
- </div>