ruby on rails 3 - rollincode - rails_admin mostrar nombre en lugar de id
rails db admin (6)
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.
En rails_admin, se enumeran los usuarios de registro de mi seminario como Usuario # 1, Usuario # 1, etc.
Me gustaría que fuera el nombre del usuario. Lo que he logrado hacer es esto:
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) Ya no es un enlace. Si dejo el valor predeterminado (Usuario # 1, Usuario # 2, etc.), proporcionará un enlace a ese usuario. ¿Cómo puedo recuperar ese enlace? ¿Cómo define rails_admin sus rutas?
2) Parece muy torpe tener que buscar por ID justo allí en mi formulario ...
Lo siento si esta es una pregunta básica. He leído el manual y he buscado otras preguntas, pero aún no me ha "pinchado". También soy bastante nuevo en los rieles.
Gracias.
Tuve que hacer esto para que funcionara con el enlace:
Agregué un método de ayuda para el nombre completo como se sugirió, pero lo mantuve en mi opinión:
module ApplicationHelper
def full_name(user_id)
user = User.find(user_id)
user.first_name + " " + user.last_name
end
end
Luego, cambié la sección "valor_muy" de la siguiente 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 asistente de visualización (rieles hechos o de otro tipo), debe agregar indings [: 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)
Con algo tan genérico como nombre generalmente agrego un método en el modelo. Pero la solución alternativa es configurar la etiqueta para el campo en RA
Hago esto como para el modelo ''Role''
config.model ''Role'' do
object_label_method do
:custom_label_method
end
end
def custom_label_method
"#{role_name}"
end
Funciona
Me topé con esta pregunta en google y encontré una manera mucho más sencilla de hacer esto. Agregue un método de title
o name
a su modelo, que rails_admin usará en lugar de mostrar "Usuario # 1".
class User
...
def name
first_name + " " + last_name
end
...
end
Puede usar el title
lugar del name
, pero en su caso tiene más sentido usar el nombre.
Puedes usar rails_admin object_label_method
Para el modelo de usuario, en rails_admin.rb
config.model ''User'' do
object_label_method do
:custom_label_method
end
end
En modelo crear método
def custom_label_method
"User #{user_name}"
end
Simplemente agregue 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
Luego reinicie el servidor.
Debe agregar tanto el método to_s
como el title
, y puede cambiar self.name
por lo que desee del esquema de usuario.
Me funciona con Rails 4.
RailsAdmin.config {|c| c.label_methods << :full_name}
o
config.model full_name do
object_label_method do
:full_name
end
end
Luego agrega un método full_name en tu modelo.