【问题标题】:Displaying simple_form error messages in top <div>在顶部 <div> 中显示 simple_form 错误消息
【发布时间】:2012-06-06 08:59:18
【问题描述】:

我有以下两种_forms:

用户表单

<%= 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 in 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

【问题讨论】:

    标签: ruby-on-rails-3 simple-form formbuilder


    【解决方案1】:

    只需将 error: false 添加到您的输入中,这不会清除 css 但会清除内联错误

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

    编辑:

    来自http://ruby.railstutorial.org/book/ruby-on-rails-tutorial

    /app/views/shared/_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 %>
    

    【讨论】:

    • 在第一个块上缺少 :`
      表单包含 。
      • *
      `
    • 我喜欢这种使用部分来解决表单错误的实现,酷!
    • 使用&lt;li&gt;* &lt;%= msg %&gt;&lt;/li&gt; 有点奇怪,因为&lt;li&gt; 已经产生了子弹。可能会考虑删除它,即改用&lt;li&gt;&lt;%= msg %&gt;&lt;/li&gt;
    • @adamonduty 取决于你的 CSS。我想要* 而不是子弹,因为我觉得它更能说明物品的重要性。
    • 提示:如果你把部分放在app/views/application而不是app/views/shared,那么你可以用&lt;%= render 'error_messages', object: f.object %&gt;而不是&lt;%= render 'shared/error_messages', object: f.object %&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多