Вопрос по ruby-on-rails – Проблема с флеш-сообщениями в ruby 1.9.3 и rails 3.2.2

1

У меня проблема с флэш-сообщением в моем приложении. На самом деле в моем приложении я использовал устройство для аутентификации пользователей и мое приложение с ruby 1.9.3 и rails 3.2.2.

Когда пользователь входит в систему, выходит из системы и регистрирует новую учетную запись, устройство devise flash [: note] работает нормально.

В Rails флеш-сообщения [: note] и flash [: alert] являются флеш-сообщениями по умолчанию.

Флэш-сообщения отображаются только один раз при перезагрузке страницы или когда пользователь переходит с одной страницы на другую.

Проблема заключается в том, что когда пользователь входит в систему, отображается устройство devise [: note], но когда я перезагружаю страницу, отображается вспышка [: note], а в рельсах вспышка [: note] будет отображаться только один раз.

На самом деле проблема заключается в том, что когда я пытаюсь создать новую запись, я перенаправляю на страницу показа, и у меня есть метод write helper для flash-сообщения. Этот метод вызывается из макета приложения для отображения flash-сообщений.

В контроллере создать метод

<code>def create
  @asset = Asset.new(params[:asset])
  @asset.user_id = current_user.id

  respond_to do |format|
    if @asset.save
      format.html { redirect_to @asset, alert: 'Asset was successfully created.' }
      format.json { render json: @asset, status: :created, location: @asset }
    else
      format.html { render action: "new" }
      format.json { render json: @asset.errors, status: :unprocessable_entity }
    end
  end     
end
</code>

Метод Helper для отображения флеш-сообщений

<code>FLASH_TYPES = [:error, :warning, :success, :message,:notice,:alert]

def display_flash(type = nil)
  html = ""  
  if type.nil?
    FLASH_TYPES.each { |name| html << display_flash(name) }
  else
    return flash[type].blank? ? "" : "<div class=\"#{type}\"><p>#{flash[type]}</p>     </div>"
  end
  html.html_safe
end
</code>

у меня есть вызов этого метода формы макета приложения

<code>= display_flash
</code>

Я пробовал использовать flash [: alert], flash [: error], flash [: message], но на странице просмотра сообщения не отображается, и я пробовал использовать gem под названием flash_message, это также отображает только вспышки [: уведомление]

Пожалуйста, помогите мне решить эту проблему

Ваш Ответ

1   ответ
-1

чтобы показать флэш-сообщение. Сначала я делаю частичный

_flash.html.erb в общий. Код этого частичного

 <% [:alert, :notice, :error].select { |type| !flash[type].blank? }.each do |type| %>
<p>
  <% if flash[:notice] %>
    <div class="alert-message error">
      <h2 style="color: #ffffff;">Notice:</h2> <br/>
      <%= flash[type] %>
    </div>
<% elsif flash[:error] %>
    <div class="alert-message error">
      <h2 style="color: #ffffff;">Errors</h2> <br/>
      <% flash[:error].each_with_index do |error, index| %>
          <%= index+1 %>. <%= error %> <br/>
      <% end %>
    </div>
  <% end %>


   </p>
  <% end %>

и я называю это в макете приложения, как это

  <div id="flash">
    <%= render :partial => 'shared/flash', :object => flash %>
  </div>

И в уведомлении об использовании контроллера, предупреждение, как это

  flash[:notice] = 'Admin was successfully created.'
  flash[:alert] = 'Admin was successfully created.'

Но для отображения ошибок я использую массив, потому что он может быть больше, чем один.

       def create
         @user = User.new(params[:user])
         @user.is_activated = true
# @user.skip_confirmation!
if @user.save
  role = Role.find_by_name("admin")
  RoleUser.create!(:user => @user, :role => role)
  redirect_to :controller => '/administrator', :action => 'new'
  flash[:notice] = 'Admin was successfully created.'
else
  flash[:error]=[]
  @user.errors.full_messages.each do |error|
    flash[:error] << error
  end

  render :action => "new"
end

конец

добавить эту строку в application.js

   setTimeout("$('#flash').html(' ');", 10000);

Используйте это и наслаждайтесь !!!!!!!!!!!!!!

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