2011-10-29 16 views
6

Actualmente tengo una aplicación Rails 3.0.10 y realicé dos modelos con asociaciones simples: has_many y belongs_to.Rails 3 - ActiveAdmin - Visualización del objeto ActiveRecord en lugar de texto

Después de instalar el complemento ActiveAdmin y crear los archivos de recursos de Ruby correspondientes, he notado un comportamiento extraño.

A continuación, puede ver que "Archivo de trabajo" pertenece a "Clientes de Ernet". Todas las asociaciones funcionan correctamente; sin embargo, el nombre para mostrar aparece como el objeto activo ActiveRecord en lugar del nombre del cliente.

enter image description here

Esta es la opinión de demostración cuando en la sección "Archivo de empleo":

enter image description here

Pero, si voy a ver el cliente real, aparece el texto correcto:

enter image description here

Debe haber un problema en el archivo "Job File" resou Esto es lo que está causando esto, pero no puedo entender qué podría ser. Tras Google encontré esto: http://groups.google.com/group/activeadmin/browse_thread/thread/2a261e070efa7bae

Dentro del archivo JobFile.register que se especifica el nombre para mostrar con esto:

filter :ernet_client, :display_name_methods => :display_name 

esto no funciona, sin embargo, y pasado por todos los de los otros nombres disponibles en vano.

Busqué las dependencias de ActiveAdmin y sass-rails parece ser el único, pero eso es si estás usando 3.1 y estoy usando Rails 3.0.10.

Y, por último, para estar seguro de que mis asociaciones fueron de hecho trabajando, me abrió la consola de Rails y crea un archivo de trabajo:

job = JobFile.new 
=> #<JobFile hash returned> 
job.ernet_client_id = 2 
=> 2 
job.ernet_client.client_name 
=> Target 

Todo parece estar funcionando como debiera.

¿Alguien tiene alguna idea de cómo resolver esto?

Respuesta

10

¿Intentó definir un método to_s en el modelo ErnetClient?

def to_s 
    display_name 
end 

Parece que este es el método que se llama de forma automática, como si lo hizo llamar to_s en uno de estos objetos en la consola que se obtendría un resultado similar.

+0

Ok, definí un método to_s en el modelo ErnetClient.rb como sugirió. Termina causando un error en el archivo active_admin/resource/index.html.arb: variable local indefinida o método 'display_name 'para # . Sin embargo, también puse el símbolo ": display_name" en el método.Esto provocó que los filtros desplegables literalmente mostraran ": display_name" para todas las opciones desplegables. – PhillipKregg

+0

Bueno, no tienes un método 'display_name' para eso. El método 'to_s' debe devolver cualquier cadena que desee mostrar para su objeto' ErnetClient'. –

+0

Por lo que estoy viendo, display_name es un método que ya existe en el complemento ActiveAdmin bajo viewhelpers: https://github.com/gregbell/active_admin/blob/master/lib/active_admin/view_helpers/display_helper.rb. ¿Podría haber algo que impida que mi aplicación lo vea? – PhillipKregg

3

Puede encontrar la explicación aquí Filter select show object instead of object name.

# Active Admin makes educated guesses when displaying objects, 
this is the list of methods it tries calling in order 
     setting :display_name_methods, [ :display_name, 
              :full_name, 
              :name, 
              :username, 
              :login, 
              :title, 
              :email, 
              :to_s ] 

Es posible definir un display_name, full_name, o ... (véase la lista anterior) ... método en su modelo. ActiveAdmin busca uno de esos.

Cuestiones relacionadas