2010-11-04 29 views
35

Sử dụng Devise, tôi muốn biết liệu có cách nào để xóa một thông báo flash cụ thể không? (Đã đăng nhập thành công).Devise/Rails - Cách xóa một tin nhắn flash cụ thể? (Đã đăng nhập thành công)

Tôi quan tâm đến các thông điệp khác trong chế độ xem, vì vậy nó chỉ dành cho đăng nhập và đã đăng xuất. Tôi có phải ghi đè lên bộ điều khiển hoặc có cách nào khác không?

Cảm ơn bạn!

Trả lời

52

Bạn chỉ cần xác định nó thành một chuỗi rỗng trong tệp cục bộ của bạn. Trong trường hợp này bạn không thấy gì cả.

+0

Cảm ơn shingara, Thực ra tôi đã làm điều đó, nhưng css của tôi vẫn xuất hiện – benoitr

+0

kiểm tra nếu nó trống. – shingara

+0

chỉ cần cảm ơn !! – benoitr

37

Ok!

Như Shingara nói tôi xác định một chuỗi rỗng trong devise.en.yml

sessions: 
    signed_in: '' 

và tôi cũng thay đổi một chút dòng sau (được cung cấp bởi tiện lợi-máy phát điện):

<% flash.each do |name, msg| %> 
    <%= content_tag :div, msg, :id => "flash" if msg.length > 0 %> 
<% end %> 

Trong theo cách đó, css của tôi không xuất hiện.

+7

Một chút gọn gàng, bạn có thể thay đổi "msg.length> 0" thành "msg.present?". Nó sẽ dễ đọc hơn. –

+0

Tệp này thường được đặt tại 'config/locales/devise.en.yml' – philfreo

8

chuỗi rỗng trong file locale (như đề xuất ở trên) mà còn thêm đoạn CSS sau đây để ẩn (thay vì monkeying với tầm flash của bạn)

.flash.alert:empty { 
    display: none; 
} 
2

Từ quan điểm của tôi Tôi không nhìn thấy điểm trong việc làm rỗng một chuỗi dịch, khi bạn có thể dễ dàng sửa đổi cách bộ điều khiển hoạt động. Tôi đoán cách này chính xác và thỏa mãn hơn nhiều.

Câu trả lời hay hơn có thể là ghi đè phương thức hủy trong sessionController.

Chỉ cần tạo ra một tập tin được đặt trong: app/controllers/sessions_controller.rb

Như bạn có thể thấy chúng ta nhận xét dòng tạo ra tin nhắn nhấp nháy.

class SessionsController < Devise::SessionsController 
    # DELETE /resource/sign_out 
    def destroy 
    signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)) 
    #set_flash_message :notice, :signed_out if signed_out && is_flashing_format? 
    yield if block_given? 
    respond_to_on_destroy 
    end 
end 
+0

Bạn có thể không muốn làm điều đó bởi vì bạn đang vá khỉ. Nếu sửa lỗi được thực hiện thì bạn sẽ mất bản sửa lỗi. Bằng cách thiết lập một cái gì đó bạn không quan tâm đến một chuỗi rỗng và chắc chắn rằng bạn không in ra chuỗi tin nhắn rỗng bạn đang sử dụng hệ thống theo cách nó được thiết kế. –

6

Một cách linh hoạt để đến đây là để bỏ đặt thông báo sau khi hành động:

class SessionsController < Devise::SessionsController 
    after_action :remove_notice, only: :destroy 

    private 

    def remove_notice 
    flash[:notice] = nil 
    end 
end 

Với giải pháp này, bạn có thể thêm điều kiện để loại bỏ hoặc không được thông báo.

0

Tôi nghĩ rằng bây giờ hãy nghĩ rằng nếu bạn thay đổi thông báo lỗi trong config/locals/devise.en.yml thành một chuỗi rỗng, nó sẽ tự động bỏ qua nó. Ít nhất đó là những gì đã làm việc với tôi.

0

Bạn có thể thực hiện việc này, Vui lòng thay đổi loại điều kiện và loại flash phù hợp.

flash.delete (: alert) nếu flash [: alert] == ​​"Bạn cần đăng nhập hoặc đăng ký trước khi tiếp tục." @drivers = params [: keyword] .blank? ? []: Driver.find (params [: keyword])

Bạn có thể thực hiện nó trước bộ lọc.

4

Một cách khác là nếu bạn ghi đè lên bộ điều khiển lập mưu, trong tạo hành động, đặt mã này, trong đó xóa các tin nhắn nhấp nháy:

class MyDevise::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 

this was answered in this other SO question. Đối với một bài viết trên blog về cách ghi đè lên bộ điều khiển lập mưu, xem my blog post

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