2012-04-10 4 views
1

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

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

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

Вспышка сообщение является отображением только один раз, когда перезагрузка страницы или когда пользователь отрицательна с одной страницы на другую страницу

Проблема, когда пользователь Войти в Разрабатывает флеш [: извещение] отображает, но когда я перезагружу на странице отображается вспышка [: уведомление], но в рельсах вспышка [: уведомление] будет отображаться только один раз

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

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

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 

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

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 

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

= display_flash 

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

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

ответ

-1

Hy я использую с помощью этого подхода, чтобы показать вспышку message.First я сделать частичное

_flash.html.erb в shared.The код этого частичного

<% [: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.' 

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

 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); 

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