2013-04-06 3 views
7

Sembra che dovrebbe essere abbastanza semplice, comprare Non sono stato in grado di trovare alcuna documentazione sull'argomento.Active Admin: come personalizzare le etichette per selezionare il filtro?

ho il seguente filtro:

filter :archived, as: :select 

... che mi dà un filtro di lavoro nella forma di una casella di selezione con le opzioni "Qualsiasi", "Sì", e "No".

La mia domanda è: come personalizzare queste etichette in modo che la funzionalità rimanga la stessa, ma le etichette sono invece "Tutto", "In diretta" e "Archiviato"?

risposta

13

La semplice e veloce:

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

tuttavia, che non vi darà un modo per personalizzare l'opzione "Tutti" senza cambiare I18n.

aggiornamento: Ecco un'altra opzione:

# 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

Ho avuto lo stesso problema, ma ho bisogno di selezionare personalizzato in filtri di indice e input di form, così ho trovato una soluzione simile: in App/ingressi (come suggerisco Formtastic) creo due clases:

in app/ingressi/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 

in app/ingressi/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 

E nella mia 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 

Come si può vedere, ActiveAdmin cercare Filter [: your_custom_name:] Input e [: your_custom_name:] di ingresso in contesto diverso, filtri indice o input modulo. Pertanto, è possibile creare questa estensione di clases di ActiveAdmin :: Inputs: FilterSelectInput o Formtastic :: Inputs: SelectInput e personalizzare la logica.

Funziona per me, spero lo si può trovare utile

0

Ecco un hack che funziona ... senza la necessità di scrivere nuovi controlli ingressi!

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 

non è "pulito" o "elegante", ma funziona abbastanza bene :)