2013-04-06 11 views
7

To wygląda na to, że powinno być dość proste, kupiłem, nie byłem w stanie znaleźć żadnej dokumentacji na ten temat.Aktywny administrator: jak dostosować etykiety do filtra wyboru?

Mam następujący filtr:

filter :archived, as: :select 

... co daje mi filtr roboczą w postaci wybranej skrzynki z opcji „Dowolny”, „Tak” i „Nie”.

Moje pytanie brzmi: w jaki sposób mogę dostosować te etykiety tak, aby funkcjonalność pozostała taka sama, ale etykiety są zamiast tego "Wszystkie", "Na żywo" i "Zarchiwizowane"?

Odpowiedz

13

Szybkie i łatwe:

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

jednak, że nie daje sposób, aby dostosować opcję „Wszystkie” bez zmiany i18n.

AKTUALIZACJA: Oto kolejna opcja:

# 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

miałem ten sam problem, ale muszę niestandardowy wybierz w filtrach indeksowych i wejść formy, więc znalazłem podobnego rozwiązania: w APP/wejść (jak proponuję formtastic) tworzę dwa clases:

w aPP/wejść/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 

w aPP/wejść/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 

I w moim app/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 

Jak widać, ActiveAdmin szukać Filtr [: your_custom_name:] [: wejściowy i your_custom_name:] Wejście w inny kontekst, filtry indeksu lub dane wejściowe formularza. Tak więc możesz utworzyć rozszerzenie klauzuli ActiveAdmin :: Inputs :: FilterSelectInput lub Formtastic :: Inputs :: SelectInput i dostosować swoją logikę.

To działa dla mnie, mam nadzieję, że może okazać się przydatny

0

Oto hack który działa ... bez potrzeby pisać nowych kontroli wejść!

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 

nie jest "czysty", ani "elegancki", ale działa ona na tyle dobrze :)

Powiązane problemy