2013-04-06 29 views
7

Điều này có vẻ như khá đơn giản, tôi đã không thể tìm thấy bất kỳ tài liệu nào về chủ đề này.Quản trị viên hoạt động: Cách tùy chỉnh nhãn cho bộ lọc đã chọn?

Tôi có bộ lọc sau:

filter :archived, as: :select 

... mà mang lại cho tôi một bộ lọc làm việc theo hình thức một hộp chọn với các tùy chọn "Bất kỳ", "Vâng", và "Không".

Câu hỏi của tôi là: Làm cách nào để tùy chỉnh các nhãn này sao cho chức năng vẫn giữ nguyên, nhưng nhãn thay vào đó là "Tất cả", "Trực tiếp" và "Đã lưu trữ"?

Trả lời

13

Các nhanh chóng và dễ dàng:

filter :archived, as: :select, collection: [['Live', 'true'], ['Archived', 'false']] 

Tuy nhiên, đó sẽ không cung cấp cho bạn một cách để tùy biến "Tất cả" tùy chọn mà không thay đổi i18n.

CẬP NHẬT: Đây là một lựa chọn:

# Somewhere, in an initializer or just straight in your activeadmin file: 
class ActiveAdmin::Inputs::FilterIsArchivedInput < ActiveAdmin::Inputs::FilterSelectInput 
    def input_options 
    super.merge include_blank: 'All' 
    end 

    def collection 
    [ ['Live', 'true'], ['Archived', 'false'] ] 
    end 
end 

# In activeadmin 
filter :archived, as: :is_archived 
0

tôi đã cùng một vấn đề, nhưng tôi cần tùy chỉnh chọn lọc trong bộ lọc chỉ số và đầu vào hình thức, vì vậy tôi đã tìm thấy một giải pháp tương tự: Trong ứng dụng/đầu vào (như đề nghị formtastic) tôi tạo ra hai clases:

Trong ứng dụng/đầu vào/country_select_input.rb:

class CountrySelectInput < Formtastic::Inputs::SelectInput 

    def collection 
    I18nCountrySelect::Countries::COUNTRY_CODES.map { |country_code| 
     translation = I18n.t(country_code, scope: :countries, default: 'missing') 
     translation == 'missing' ? nil : [translation, country_code] 
    }.compact.sort 
    end 

end 

Trong ứng dụng/đầu vào/filter_country_select_input.r b:

class FilterCountrySelectInput < ActiveAdmin::Inputs::FilterSelectInput 

    def collection 
    I18nCountrySelect::Countries::COUNTRY_CODES.map { |country_code| 
     translation = I18n.t(country_code, scope: :countries, default: 'missing') 
     translation == 'missing' ? nil : [translation, country_code] 
    }.compact.sort 
    end 

end 

Và trong ứng dụng của tôi/admin/city.rb:

ActiveAdmin.register City do 

    index do 
    column :name 
    column :country_code, sortable: :country_code do |city| 
     I18n.t(city.country_code, scope: :countries) 
    end 
    column :created_at 
    column :updated_at 
    default_actions 
    end 

    filter :name 
    filter :country_code, as: :country_select 
    filter :created_at 

    form do |f| 
    f.inputs do 
     f.input :name 
     f.input :country_code, as: :country_select 
    end 
    f.actions 
    end 

end 

Như bạn thấy, ActiveAdmin tìm kiếm Lọc [: your_custom_name:] Input và [: your_custom_name:] Input trong ngữ cảnh khác nhau, bộ lọc chỉ mục hoặc đầu vào biểu mẫu. Vì vậy, bạn có thể tạo ra các clases này mở rộng của ActiveAdmin :: Inputs :: FilterSelectInput hoặc Formtastic :: Inputs :: SelectInput và tùy chỉnh logic của bạn.

Nó phù hợp với tôi, tôi hy vọng bạn có thể tìm thấy nó hữu ích

0

Đây là một hoạt động ... mà không yêu cầu bạn viết điều khiển đầu vào mới!

filter :archived, as: :select, collection: -> { [['Yes', 'true'], ['No', 'false']] } 

index do 
    script do 
    """ 
     $(function() { 
     $('select[name=\"q[archived]\"] option[value=\"\"]').text('All'); 
     }); 
    """.html_safe 
    end 
    column :id 
    column :something 
end 

Nó không "sạch" hay "thanh lịch", nhưng hoạt động tốt đủ :)

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