2011-10-30 41 views
5

Devise hoạt động hoàn hảo trong ứng dụng của tôi ngoại trừ thông báo flash từ devise.en.yml không được hiển thị trong chế độ xem. Tôi đang làm gì sai?Thông báo phát sáng flash không hiển thị

Dưới đây là chế độ xem trang đăng ký của tôi, tôi đã thử cả hai :alert:notice nhưng không hoạt động.

Cảm ơn bạn trước

<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" %> 

Trả lời

6

Bạn không thấy đèn flash vì đèn flash không được đặt thành bất kỳ thứ gì. Có vẻ như bạn hiểu sai mục đích của flash.

Hành vi chung của flash được đặt thành giá trị trong phiên hiện tại của người dùng trong yêu cầu hiện tại, sau đó trên yêu cầu tiếp theo, thông báo flash đó sẽ hiển thị. Mẫu này cho phép các hành động đặt flash, chuyển hướng đến một trang khác, sau đó có flash được hiển thị trên trang đó tải từ chuyển hướng. Đèn flash sau đó được tiêu thụ và loại bỏ khỏi phiên.

Trường hợp ngoại lệ là sử dụng flash.now làm cho đèn flash có sẵn từ hành động hiện tại, thay vì hành động tiếp theo.

Trong trường hợp của bạn, đèn flash không hiển thị vì không có đèn flash để hiển thị. Tải trang đăng ký không đặt bất kỳ thông báo flash nào. Cách duy nhất đèn flash sẽ có giá trị trong chế độ xem của bạn sẽ là nếu một số hành động khác được chuyển hướng đến nó, hãy đặt flash trước khi thực hiện. Một cái gì đó như thế này

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

Thông thường bạn không muốn gọi đèn flash trong một cái nhìn cụ thể, mà đúng hơn là trong cách bố trí ứng dụng của bạn. Điều này cho phép flash được đặt từ bất kỳ hành động nào thực hiện chuyển hướng và flash sẽ hiển thị trên bất kỳ trang tiếp theo nào xảy ra. Việc đặt flash từ một chế độ xem cụ thể sẽ yêu cầu biết rằng chế độ xem cụ thể sẽ là chế độ xem được sử dụng trong chuyển hướng. Điều này có thể không phải lúc nào cũng đúng, flash.now sẽ là một ngoại lệ vì nó không hoạt động do chuyển hướng. Nếu tôi cần sử dụng đèn flash trong một chế độ xem cụ thể, tôi sẽ không sử dụng các cảnh báo flash thông báo/cảnh báo thông thường, vì tôi sẽ tìm trong bố cục ứng dụng của tôi và sẽ khiến flash của tôi hiển thị hai lần. Thay vào đó, tôi có thể đặt flash thành một cái gì đó như

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 

Sau đó, trong người dùng/chế độ hiển thị của tôi, tôi sẽ tìm đèn flash được xử lý khác với xử lý flash trong bố cục của tôi. Tôi đã không thực sự phải làm bất cứ điều gì như thế này, nhưng nếu tôi phải làm vậy, đây là cách tôi có thể xử lý nó.

0

<% = render: một phần => "chia sẻ/flash_messages" %> hoặc = làm 'chia sẻ/flash_messages' (nếu người đang sử dụng Haml) trong file view của bạn để xem các thông báo lỗi hoặc đưa ra: sự thất bại : tin nhắn

Các vấn đề liên quan