1

アプリケーションのフラッシュ メッセージに問題があります。実際、私のアプリケーションでは、ユーザー認証にデバイスを使用し、Ruby 1.9.3 と Rails 3.2.2 でアプリケーションを使用しました。

ユーザーがログインし、ログアウトして新しいアカウントにサインアップすると、デバイスの flash[:notice] は正常に動作します。

Rails では、flash[:notice] と flash[:alert] がデフォルトの flash メッセージです。

フラッシュ メッセージは、ページのリロード時、またはユーザーが 1 つのページから別のページに否定したときに 1 回だけ表示されます。

問題は、ユーザーがログインしているときにデバイスの flash[:notice] が表示されることですが、ページをリロードすると flash[:notice] が表示されますが、レールでは flash[:notice] が 1 回だけ表示されます。

実際の問題は、新しい投稿を作成しようとすると、ショーページにリダイレクトされ、フラッシュメッセージ用のヘルパーメソッドを作成し、このメソッドをアプリケーションレイアウトから呼び出してフラッシュメッセージを表示することです。

コントローラの create メソッドで

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

フラッシュ メッセージを表示するヘルパー メソッド

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 という gem を試しましたが、これも flash[:notice] のみが表示されます

この問題を解決するのを手伝ってください

4

1 に答える 1

-1

こんにちは、このアプローチを使用してフラッシュメッセージを表示しています。最初に部分的に作成します

_flash.html.erb in shared.このパーシャルのコード

 <% [: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);

それを使用してお楽しみください!!!!!!!!!!!!!

于 2012-04-10T11:55:19.877 に答える