2011-10-30 129 views
5

Devise在我的應用程序中完美工作,除了devise.en.yml的flash消息不會顯示在視圖中。我究竟做錯了什麼?設計flash消息不會顯示

以下是我的註冊頁面視圖我已經嘗試:alert:notice但無法正常工作。

預先感謝您

<h2>Sign up</h2> 

<% if flash[:alert] %> 
    <%=flash[:alert]%> 
<%end%> 

<%= form_for(resource,:as=>resource_name,:url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 
    <p><%= f.label :Username %></p> 
    <p><%= f.text_field :username %></p> 

    <p><%= f.label :email %></p> 
    <p><%= f.text_field :email %></p> 

    <p><%= f.label :password %></p> 
    <p><%= f.password_field :password %></p> 

    <p><%= f.label :password_confirmation %></p> 
    <p><%= f.password_field :password_confirmation %></p> 

    <p><%= f.submit "Sign up" %></p> 
<% end %> 

<%= render :partial => "devise/shared/links" %> 

回答

6

您沒有看到任何閃光,因爲閃光燈沒有被設置爲任何東西。這似乎是你誤解了閃光燈的目的。

Flash的一般行爲是在當前請求中設置爲用戶當前會話中的值,然後在隨後的請求中顯示該Flash消息。這種模式允許設置閃存的動作,重定向到其他頁面,然後在該頁面上顯示從重定向加載的閃存。閃存然後被消耗並從會話中移除。

這種情況的例外是使用flash.now,它使得當前動作可以使用flash,而不是後續動作。

在你的情況下,由於沒有閃光燈顯示,閃光燈不顯示。加載註冊頁面不會設置任何Flash消息。閃光燈在您的視角中具有唯一價值的方法是,如果其他操作重定向到該設置,則在閃光燈設置之前設置閃光燈。這樣

redirect_to new_user_registrations_path, :notice => "This flash will show up on the sign up page" 

東西通常你不想調用特定視圖中的閃光,而是在你的應用程序佈局。這允許從任何進行重定向的動作設置閃存,並且閃存將在隨後的頁面出現時顯示。從特定視圖設置閃光燈需要知道特定視圖將在重定向中使用。這可能不總是這樣,flash.now將會是一個例外,因爲它不能工作在重定向之外。如果我確實需要在特定視圖中使用閃光燈,我不會使用傳統的警報/通知閃光變焦,因爲我會在我的應用程序佈局中尋找閃光變焦,並且會使我的閃光燈呈現兩次。相反,我可以把閃光燈像

class UsersController < ApplicationController 
    def custom_action 
    @user = User.find params[:id] 
    do_something_with @User 
    flash[:user] = "Custom action completed!" 
    redirect_to @user 
    end 
end 

然後在我的用戶/顯示視圖我會找閃光燈[:自定義],並做是不是在我的佈局閃光燈處理處理方式不同的是閃光的東西。我實際上並不需要這樣做,但如果我必須這樣做,這就是我可以處理它的方式。

0

<%=渲染:局部=> 「共享/ flash_messages」 %> 或 =渲染的共享/ flash_messages'在視圖文件(如果人正在使用Haml的) 查看錯誤消息或設計:失敗:消息