2012-04-26 7 views
10

¿Cómo puedo hacer que el administrador activo muestre "Sí" y "No" en lugar de "verdadero" y "falso".Mostrar booleanos en Active Admin como 'Sí' y 'No'

Intenté cambiar en la configuración de inglés pero eso no funciona. Estoy pensando en monopatching clases booleanas, pero esto parece bastante feo.

¿Hay algo más que pueda hacer?

Respuesta

9

Aquí, esto funciona, le da un tic y una cruz, pero parece ser fácil de modificar.

https://gist.github.com/2574969

Tendrá que reiniciar el servidor de rieles para que esto funcione, ya que modifica la initialiser active_admin.rb.

Por supuesto crea una clase, que es lo que quiere evitar, pero a falta de otra cosa, esto funciona.

2

Como Ahmad dijo que desea evitar crear clases solo para eso.

Así que no hay otra solución:

En su configuración regional active_admin.en.yml (o lo que sea) sólo tiene que añadir estas dos líneas:

en: 
    "true": Yes 
    "false": No 

A continuación, en el archivo app/admin/my_model.rb de ejemplo para mostrar Sí/No a la página de índice, simplemente hacer esto:

column :published do |post| 
     t(post.published.to_s) 
end 

por lo que sólo tiene que dar vuelta a su cadena de valor booleano y utilizar la "t" de función (traducción i18n) para Rails i buscar En sus configuraciones regionales, presente la traducción correcta y reemplace 'verdadero/falso' por 'Sí/No'.

Creo que es una mejor solución, sigues el "Rails Spirit" y es más fácil tener un panel active_admin en diferentes idiomas.

El inconveniente (porque no hay Allways uno) es que usted tendrá que utilizar la función de "t" cada vez que se desea reemplazar por booleanos Sí/No ...

Sería genial hacer una solicitud de extracción a la gema active_admin que ofrece la posibilidad de reemplazar booleanos simplemente cambiando el archivo yml como lo hice.

Pero ... hasta que termine, mi solución funciona bien. :)

15

Intente utilizar directamente en la condición de administración activa de la siguiente manera

column :column_name do|object| 
    object.column_name? ? 'Yes' : 'No' 
end 
+1

No sabe por qué esto no ha sido upvoted sin embargo, parece que la solución más sencilla. Siguiendo su ejemplo, hice: 'column: us_citizen, Proc.new {| obj | obj.us_citizen? ? 'Sí': 'No'} ' – DemitryT

3

Es muy simple,

Suponga que su nombre de campo booleano está activo,

crear un método llamado estado como

def status 
    self.active ? "Yes" : "No" 
end 

Utilice estado como un campo normal en el show o índice de administración activa.

48

Que le gustaría hacer algo como esto:

index do 
    id_column 
    column(:published) do |story| 
    story.published? ? status_tag("yes", :ok) : status_tag("no") 
    end 
end 

Esto envolver las palabras "Sí" y "No" en las etiquetas de estado que se ven bastante bien.

+0

¡Eso es bastante astuto! – ScottJShea

+2

Gracias Scott, se ven bien ¿no? Puede especificar el color usando: rojo,: verde o: gris también. – superluminary

+0

modificarlo a t ("sí") e i18n también está bien :) –

0

Creo que esto también puede pasar, sin más parches de mono.

para los carriles 5.

column :signed_up?, sortable: 'signed_up' do |interest| 
    ActiveRecord::Type::Boolean::FALSE_VALUES.exclude?(interest.signed_up) 
end 

para los carriles 4.

column :signed_up?, sortable: 'signed_up' do |interest| 
    ActiveRecord::Type::Boolean::TRUE_VALUES.include?(interest.signed_up) 
end 

column :signed_up?, sortable: 'signed_up' do |interest| 
    ActiveRecord::Type::Boolean::FALSE_VALUES.exclude?(interest.signed_up) 
end 
Cuestiones relacionadas