Ruby on Rails中的form_for错误消息

Kyl*_*cot 14 ruby ruby-on-rails ruby-on-rails-4

form_for在Rails 4中使用显示验证错误消息的首选方法是什么?

<%= form_for @post do |f| %>
  ...
<% end %>
Run Code Online (Sandbox Code Playgroud)

Dan*_*nny 30

这就是我为我的表单对象显示它们的方式 @location:

<% if @location.errors.any? %>
<ul>
  <% @location.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
</ul>
<% end %>
Run Code Online (Sandbox Code Playgroud)

注意:将上面的代码放在<%= form_for @location do |f| %>行之后


Wes*_*ter 12

我这样做的首选方法是保持代码简单和干燥,如下:

application_helper.rb中创建一个新的帮助

# Displays object errors
def form_errors_for(object=nil)
  render('shared/form_errors', object: object) unless object.blank?
end
Run Code Online (Sandbox Code Playgroud)

shared/_form_errors.html.erb中创建一个新的共享部分

<% content_for :form_errors do %>
  <p>
    <%= pluralize(object.errors.count, "error") %> prevented the form from being saved:
  </p>

  <ul>
    <% object.errors.full_messages.each do |message| %>
      <li><%= message %></li>
    <% end %>
  </ul>
<% end %>
Run Code Online (Sandbox Code Playgroud)

编辑application.html.erb文件以包含所需的错误:

<%= yield :form_errors %>
Run Code Online (Sandbox Code Playgroud)

最后,将帮助器放在每个表单的开头:

<%= form_for(@model) do |f| %>
  <%= form_errors_for @model %>

  <%# ... form fields ... %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这使得管理和显示多种形式的表单错误变得非常简单.


Jes*_*ott 8

与Rails 3相同 - 有关许多不同的可能性,请参阅Rails 3.0中的f.error_messageshttp://railscasts.com/episodes/211-validations-in-rails-3.

我个人的偏好是使用simple_form并将错误放在输入旁边.