2012-07-25 17 views
19

He instalado rails_admin en mi aplicación y quiero hacer algo bastante básico ... Tengo dos modelos y su asociación aparece como se esperaba ... Tengo un modelo de registro de seminario que pertenece_ a :usuario.rails_admin nombre para mostrar en lugar de id

En el rails_admin En él se enumeran mis usuarios inscripción del seminario como Usuario # 1, Usuario # 1, etc.

me gustaría tener que ser el nombre del usuario en su lugar. Lo que he logrado hacer es lo siguiente:

config.model SeminarRegistration do 
label "Seminar Signups" 
# Found associations: 
    configure :user, :belongs_to_association 
    configure :seminar_time, :belongs_to_association # # Found columns: 
    configure :id, :integer 
    configure :user_id, :integer   # Hidden 
    configure :seminar_time_id, :integer   # Hidden 
    configure :created_at, :datetime 
    configure :updated_at, :datetime # # Sections: 

list do 
    field :user do 
    pretty_value do 
    user = User.find(bindings[:object].user_id.to_s) 
    user.first_name + " " + user.last_name 
    end 
    end 
    field :seminar_time 
end 
export do; end 
show do; end 
edit do; end 
create do; end 
update do; end 
end 

La sección "pretty_value" me da el texto del nombre y apellido de mi usuario ... pero tiene dos problemas:

1) Es sin más un enlace. Si dejo el valor predeterminado (Usuario n. ° 1, Usuario n. ° 2, etc.), proporciona un enlace a ese usuario. ¿Cómo recupero ese enlace? ¿Cómo define rails_admin sus rutas?

2) parece muy torpe a tener que mirar hacia arriba por id allí mismo, en mi forma ...

Lo siento si esto es una pregunta básica. He leído el manual y busqué otras preguntas, pero aún no me han hecho "clic". También soy bastante nuevo en los rieles.

Gracias.


que tenía que hacer esto para conseguir que funcione con el enlace:

añadí un método de ayuda para el nombre completo tal como se sugiere, pero guardé en mis ayudantes de vista:

module ApplicationHelper 
def full_name(user_id) 
    user = User.find(user_id) 
    user.first_name + " " + user.last_name 
end 
end 

Entonces, cambié la sección "pretty_value" de esta manera:

pretty_value do 
    user_id = bindings[:object].user_id 
    full_name = bindings[:view].full_name(user_id) 
    bindings[:view].link_to "#{full_name}", bindings[:view].rails_admin.show_path('user', user_id) 
end 

Básicamente, para obtener acceso a cualquier punto de vista que él lpers (carriles de hecho o de otra manera) que hay que añadir ONCLUSIONES [Ver]: .my_tag_to_use

Para obtener la ruta rails_admin para un usuario, por ejemplo, puede hacer:

bindings[:view].rails_admin.show_path('user', user_id) 

Respuesta

20
RailsAdmin.config {|c| c.label_methods << :full_name} 

o

config.model full_name do 
    object_label_method do 
    :full_name 
    end 
end 

A continuación, agregue un método full_name en su modelo.

+0

Ok, esa es una forma más limpia de hacerlo. Pero no conseguí el enlace ... Edité mi respuesta anterior para mostrar cómo funcionaba. – user1535082

+0

Funciona, pero en las búsquedas de asociación solo puede buscar según el nombre o el apellido, pero no ambos juntos. –

+0

También recibo un enlace con object_label_method, la asociación solo tiene que definirse –

30

Me encontré con esta pregunta en google y encontré una manera mucho más simple de hacer esto. Agregue un método title o name a su modelo, que rails_admin utilizará en lugar de mostrar "Usuario n.º 1".

class User 
    ... 
    def name 
    first_name + " " + last_name 
    end 
    ... 
end 

Se puede utilizar en lugar de titlename, pero en su caso tiene más sentido para usar el nombre.

+0

Respuesta impresionante y fácil, ¡por favor! – GuiGreg

+0

el mejor hack jamás! : D – AshwinKumarS

+1

absolutamente brillante. Esta debería ser la respuesta aceptada. – Brit200313

9

hago esto como modelo para el 'papel'

config.model 'Role' do 
    object_label_method do 
    :custom_label_method 
    end 
end 

def custom_label_method 
    "#{role_name}" 
end 

Funciona

+1

Esto era exactamente lo que necesitaba. Agregaría un poco de contexto para otros que debería agregar el "config.model" al inicializador rails_admin.rb y el método_label_personalizado a la clase de modelo. –

0

Basta con añadir esto en su modelo de usuario:

# Prety User name display for rails_amdin 
def to_s 
    return self.name 
end 
def title 
    return self.to_s 
end 

a continuación, reinicie el servidor.

Debe agregar los métodos to_s y title y puede cambiar self.name por el esquema de usuario que desee.

funciona para mí con rieles 4.

+0

No necesitará 'to_s'. La definición de 'title' o' name' será suficiente, consulte la fuente [aquí] (https://github.com/sferik/rails_admin/blob/12aeaf30b2148d3cbebb2f831132b4787fd47bfe/lib/rails_admin/config.rb#L50) –

0

Con algo tan genérico como el nombre Yo suelo añadir un método en el modelo. Pero solución alternativa es configurar etiqueta para el campo en la AR

0

Puede utilizar rails_admin object_label_method

See link

Para el modelo del usuario, en rails_admin.rb

config.model 'User' do 
    object_label_method do 
    :custom_label_method 
    end 
end 

En el modelo método create

def custom_label_method 
    "User #{user_name}" 
end 
Cuestiones relacionadas