2011-04-23 35 views
41

Làm thế nào tôi có thể vô hiệu hóa tất cả các thông điệp đèn flash đá quý Devise ("đăng nhập thành công", "bạn đã đăng xuất")? Cảm ơn.Rails Vô hiệu hóa phát tin nhắn flash

+1

Bản sao câu hỏi này http://stackoverflow.com/questions/5281365/selectively-turning-off-devises-flash-notices-in-rails-3 – Voldy

Trả lời

67

Có lẽ cách dễ nhất để làm điều này là để

  1. Xác định mỗi tin nhắn như là một chuỗi trống
  2. Kiểm tra độ dài của chuỗi trước khi bạn hiển thị tin nhắn nhấp nháy.

Trong file devise.en.yml của bạn, xác định mỗi tin nhắn như trống:

en: 
    errors: 
    messages: 
     not_found: '' 
     already_confirmed: '' 
     not_locked: '' 

vv Tiếp theo, trong cách bố trí của bạn, kiểm tra các chuỗi đèn flash trống trước khi bạn xuất chúng.

<% flash.each do |key, value| %> 
    <%= content_tag :div, value, :class => "flash #{key}" unless value.blank? %> 
<% end %> 
+6

Rất thanh lịch! Đối với tôi nghĩ (2.1.0) chỉ cần thiết lập chuỗi để '' đã làm các trick mà không kiểm tra trống? –

+1

Ngay cả sau 4 năm, thao tác này vẫn hoạt động: +1, cảm ơn bạn – Abhinay

-3

lập mưu bao gồm một máy phát điện tiện dụng để sao chép tất cả các quan điểm vào dự án của bạn:

rails generate devise:views 

Bằng cách này bạn có thể chỉnh sửa các quan điểm bản thân và quyết định những gì bạn muốn giữ lại hoặc vứt bỏ (tin nhắn flash) .

+1

Dường như câu trả lời cho một câu hỏi khác. Bạn không thể tắt tin nhắn flash với điều đó. Xem câu trả lời của Brandon. – Voldy

+1

Bạn có thể nếu bạn hiển thị các tin nhắn flash trong mỗi giao diện, bằng cách xóa nó. Nhưng có vẻ như câu hỏi này giả định rằng họ đang ở trong bố trí. –

30

Một câu trả lời phù hợp hơn đối với tôi là để ghi đè lên các phiên điều khiển lập mưu như thế này

class SessionsController < Devise::SessionsController 

    # POST /resource/sign_in 
    def create 
    super 
    flash.delete(:notice) 
    end 

    # DELETE /resource/sign_out 
    def destroy 
    super 
    flash.delete(:notice) 
    end 

end 

này một cách an toàn ghi đè lên tạo ra và tiêu diệt phương pháp loại bỏ các tin nhắn nhấp nháy

+3

trong Rails 4 và Devise 3.4.1, tôi phải thêm điều này vào các tuyến: devise_for: users, controllers: {sessions: "sessions"} –

5

tôi đã có thể vô hiệu hóa chúng trong một bộ điều khiển được bằng cách ghi đè is_flashing_format?:

def is_flashing_format? 
    false 
end 

tôi đang sử dụng lập mưu 3.5.6

012.
0

Đối với Rails 5.0.6 mã này sẽ hoạt động.

app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController 

    def new 
    flash.clear 
    super 
    end 
end 

Đừng quên các tuyến đường.

config/routes.rb

devise_for :users, controllers: { sessions: 'sessions' }

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