Вопрос по simple-form, ruby-on-rails-3 – Отображение сообщений об ошибках simple_form сверху <div>

16

У меня есть две следующие _формы:

пользовательская форма

<%= simple_form_for(@user, :url => @target) 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 |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <%= f.input :email, :label => "User Email" %>
  <%= f.input :password, :label => "User Password" %>
  <%= f.input :first_name %>
  <%= f.input :last_name %>
  <%= f.button :submit %>
<% end %>

форма арендатора

<%= simple_form_for(@tenant, :url => @target) do |f| %>
  <% if @tenant.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@tenant.errors.count, "error") %> prohibited this tenant from being saved:</h2>

      <ul>
      <% @tenant.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <%= f.input :name, :label => 'Name', :required => true %>
  <%= f.input :billing_email, :label => 'Email', :required => true %>
  <%= f.input :country, :label => 'Country', :required => true %>
  <%= f.button :submit %>
<% end %>

Я наткнулся на следующий пост из stackoverflow f.error_messages в Rails 3.0

Здесь есть метод, позволяющий возвращать сообщения об ошибках из простой формы с помощью f.error_messages, но я не смог заставить это работать, так как не уверен, где этот метод должен быть сохранен. У кого-нибудь есть намеки? Метод заключается в следующем:

class StandardBuilder < ActionView::Helpers::FormBuilder
  def error_messages
    return unless object.respond_to?(:errors) && object.errors.any?

    errors_list = ""
    errors_list << @template.content_tag(:span, "There are errors!", :class => "title-error")
    errors_list << object.errors.full_messages.map { |message| @template.content_tag(:li, message) }.join("\n")

    @template.content_tag(:ul, errors_list.html_safe, :class => "error-recap round-border")
  end
end

Ваш Ответ

1   ответ
24

ложно для ваших входов, это не очистит CSS, но очистит встроенные ошибки

f.input error: false or :error => false

Редактировать

Отhttp: //ruby.railstutorial.org/book/ruby-on-rails-tutoria

/ Приложение / просмотров / общий / _error_messages.html.erb

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

с учето

<%= form_for(@user) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>

  <%= f.label :name %>
  <%= f.text_field :name %>

  <%= f.label :email %>
  <%= f.text_field :email %>

  <%= f.label :password %>
  <%= f.password_field :password %>

  <%= f.label :password_confirmation, "Confirmation" %>
  <%= f.password_field :password_confirmation %>

  <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
<% end %>
упустить <% end%> в этом первом блоке: `<% if object.errors.any? %> <div id = "error_explanation"> <div class = "alert alert-error"> Форма содержит <% = множественное число (object.errors.count, "error")%>. </ div> <ul> <% object.errors.full_messages.each do | msg | %> <li> * <% = msg%> </ li> <% end%> </ ul> </ div> <% end%> TomDunning
Мне нравится эта реализация использования частичного для ошибок формы, круто! JP Silvashy
С помощью<li>* <%= msg %></li> немного странно, так к<li> уже производит пулю. Возможно, стоит удалить его, т. Е. С помощью<li><%= msg %></li> вместо. adamlamar
@ adamonduty зависит от вашего css. Я хотел* вместо пуль, как мне кажется, это придает больше значения предмету. engineersmnky
Подсказка: если вы поставите частичное вapp/views/application вместо тогоapp/views/shared тогда ты сможешь сделать<%= render 'error_messages', object: f.object %> вместо того<%= render 'shared/error_messages', object: f.object %>. Jason Swett

Похожие вопросы