Создать помощника

могу сделатьf.error_messages работать здесь, или я должен использовать вспышки?
Если это так, что следует переопределить в session_controller?

<h2>Create an account</h2>    
<% form_for resource_name, resource, :url => registration_path(resource_name) do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :email %><br />
    <%= f.text_field :email, :class => :big %>
  </p>
  <p>
    <%= f.label :password %><br />
    <%= f.password_field :password, :class => :big %>
  </p>
  <p>
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation, :class => :big %>
  </p>

  <p><%= f.submit "Create", :class => :submit %></p>
<% end %>

PS.f.error_messages Для создания учетной записи работает совершенно нормально.

Ответы на вопрос(5)

попробуйте поместить их в свой макет:

<%= content_tag(:div, flash[:error], :id => "flash_error") if flash[:error] %>
<%= content_tag(:div, flash[:notice], :id => "flash_notice") if flash[:notice] %>
<%= content_tag(:div, flash[:alert], :id => "flash_alert") if flash[:alert] %>

Действие входа в Devise устанавливает флеш-сообщения, а не ошибки модели.

 mizurnix21 июл. 2016 г., 23:02
2016, и это работает так же, как это было в 2011 году. Итак, вопрос в следующем: если вы размещаете флэш-сообщения в макете, как вы заставляете их появляться между<h2>Sign in</h2> а также<form>...</form> на странице входа?
 Frexuz10 янв. 2011 г., 18:36
Хорошо. : уведомление работает нормально после входа в систему, но сообщение об ошибке / предупреждение, похоже, не устанавливается вообще.
 Pierre16 дек. 2015 г., 12:44
Вы спасли меня ! Спасибо
 pingu30 сент. 2013 г., 20:15
Почему он устанавливает флеш-сообщения вместо ошибок модели? Я ожидаю ошибки модели, учитывая ее неудачные проверки.
Решение Вопроса

немного хакерский, но я использую этот помощник (app / helpers / devise_helper.rb), чтобы захватывать вспышки и использовать их, если установлено, то по умолчанию установлено значениеresource.errors.

module DeviseHelper

  def devise_error_messages!
    flash_alerts = []
    error_key = 'errors.messages.not_saved'

    if !flash.empty?
      flash_alerts.push(flash[:error]) if flash[:error]
      flash_alerts.push(flash[:alert]) if flash[:alert]
      flash_alerts.push(flash[:notice]) if flash[:notice]
      error_key = 'devise.failure.invalid'
    end

    return "" if resource.errors.empty? && flash_alerts.empty?
    errors = resource.errors.empty? ? flash_alerts : resource.errors.full_messages

    messages = errors.map { |msg| content_tag(:li, msg) }.join
    sentence = I18n.t(error_key, :count    => errors.count,
                                 :resource => resource.class.model_name.human.downcase)

    html = <<-HTML
    <div id="error_explanation">
      <h2>#{sentence}</h2>
      <ul>#{messages}</ul>
    </div>
    HTML

    html.html_safe
  end

end
 James McMahon15 нояб. 2013 г., 19:27
Hacky? Вы слишком скромны, это действительно полезно.

Создать помощника

 # app/helpers/application_helper.rb

    module ApplicationHelper

      def flash_class(level)
        case level
          when 'info' then "alert alert-info"
          when 'notice','success' then "alert alert-success"
          when 'error' then "alert alert-danger"
          when 'alert' then "alert alert-warning"
        end
      end

    end

#view
<% flash.each do |key, value| %>
   <div class="<%= flash_class(key) %> fade in">
      <a href="#" class="close" data-dismiss="alert">&times;</a>
      <%= value %>
   </div>
<% end %>

я хотел поделиться решением, чтобы помочь таким людям, как я, у которых были проблемы, когда они начали использовать Devise. Чтобы сохранить вещи сухими, я просто вставил этот код в свойapplication.html.erb файл:

<body>
  <% flash.each do |key, value| %>
    <div class="flash <%= key %>"><%= value %></div>
  <% end %>

  <%= yield %>
</body>
 Frexuz13 окт. 2014 г., 11:23
Вы могли бы даже использовать<%= content_tag :div, value, class: "flash #{key}" %> :)

Это также должно сделать

<% flash.each do |name, msg| %>
  <%= content_tag :div, msg, id: "flash_#{name}" %>
<% end %>

Ваш ответ на вопрос