2011-12-05 29 views
7

Rails 3.1 và Devise 1.5 câu hỏi.Rails 3.1 Tìm hiểu cách thay đổi thông báo Flash CSS Từ thông báo thành công?

Tôi đang sử dụng đoạn mã sau để hiển thị tin nhắn flash trong cách bố trí của tôi:

<% flash.each do |key, message| %> 
     <%= content_tag(:div, message, :class => "flash #{key}") %> 
    <% end %> 

Tôi muốn thay đổi lớp css cho một số thông báo xác nhận của tôi từ ngày thông báo đến thành công, nhưng tôi don' t biết nơi để ghi đè hoặc thay đổi chìa khóa bởi vì tôi không biết nơi nó được thiết lập.

Ai có thể chỉ cho tôi đúng hướng không?

Cảm ơn!

+1

Bạn có thể chỉnh sửa văn bản phát sinh thông điệp flash bằng cách bật i18n và sửa đổi ngôn ngữ mặc định. Nhưng tôi không nghĩ rằng bạn có thể dễ dàng thay đổi nếu chúng được thêm vào dưới dạng thông báo hoặc thành công ... https://github.com/plataformatec/devise/blob/master/config/locales/en.yml. Một cách rất bẩn sẽ là thêm html trong các tin nhắn, và sửa đổi css của bạn để đưa vào tài khoản ... – Robin

Trả lời

1

Vì vậy, các cách để làm điều này là để chỉnh sửa các bộ điều khiển devise.

Khi bạn cài đặt Devise thông qua cài đặt bình thường, tôi không nghĩ rằng nó cài đặt bộ điều khiển (ít nhất là nó không cho tôi).

Vì vậy, đầu tiên bạn bằng tay nên thêm các tập tin điều khiển và đặt chúng vào dự án của bạn trong cùng một vị trí: https://github.com/plataformatec/devise/tree/master/app/controllers/devise

Một khi bạn có các tập tin trong dự án của bạn, hãy vào tập tin "sessions_controller.rb".

Một dòng 16 & 25, bạn sẽ thấy mã:

set_flash_message :notice, :signed_in 

set_flash_message :notice, :signed_out 

Bạn chỉ cần thay đổi ": thông báo" thành ": Thành công"

Hope hoạt động!

+0

Dự án của tôi ném lỗi trên các dòng tôi đã thay đổi. Có bất cứ điều gì khác bạn cần phải làm khác hơn là đặt các tập tin trong một thư mục được gọi là devise dưới thư mục bộ điều khiển? – jmosesman

0

Lớp css đang được đặt bởi đối số :class. Để thêm một lớp của notice (hoặc success, vv), chỉ cần thay đổi cuộc gọi của bạn như sau:

<%= content_tag(:div, message, :class => "flash #{key} notice") %> 
+2

Điều này sẽ thêm một lớp thông báo cho mỗi tin nhắn flash, mà không phải là những gì anh ta muốn. – Robin

0

Tôi gặp sự cố này vì tôi đang sử dụng đá quý bootstrap-sass sử dụng cấu trúc lớp hoàn toàn khác cho thông điệp flash. Tôi đã tuyến đường giải quyết điều này với sass chứ không phải là rối tung với devise ở tất cả (thừa kế sass là awesome :).

Vì vậy, tôi làm cho thông điệp flash trong app/view/layouts/application.html.haml:

%div.container 
    - flash.each do |key, value| 
    = content_tag(:div, value, class: "alert alert-dismisable alert-#{key}") 

Và, tôi thêm một quy tắc đơn giản để app/assets/stylesheets/custom.css.scss để có được thông điệp đèn flash lập mưu của làm việc:

/* Style Devise Flash messages like Bootstrap */ 
.alert-alert { 
    @extend .alert-warning; 
} 

Vậy là xong! bây giờ flash[:alert] được thiết kế giống như bootstrap's flash[:warning].

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