Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rails_admin display name instead of id

I've installed rails_admin into my app and I want to do something pretty basic...I have two models and their association comes up as expected...I have a seminar registration model that belongs_to :user.

In the rails_admin it lists my seminar registration users as User #1, User #1, etc.

I'd like to have that be the user's name instead. What I've managed to do is this:

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

The "pretty_value" section gives me the text of my user's first and last name...but has two problems:

1) It is no longer a link. If I leave the default value (User #1, User #2, etc) it provides a link to that user. How do I get that link back? How does rails_admin define it's paths?

2) Seems awfully clunky to have to look up by id right there in my form...

Sorry if this is a basic question. I've read the manual and looked up other questions but it hasn't quite "clicked" for me yet. I'm also pretty new to rails.

Thanks.


I had to do this to get it to work with the link:

I added a helper method for the full name as suggested, but kept it in my view helpers:

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

Then, I changed the "pretty_value" section like so:

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

Basically, to get access to any view helpers (rails made or otherwise) you have to add indings[:view].my_tag_to_use

To get the rails_admin route for a user, for example you can do:

bindings[:view].rails_admin.show_path('user', user_id)
like image 970
user1535082 Avatar asked Jul 25 '12 20:07

user1535082


3 Answers

I stumbled upon this question on google and found a much simpler way to do this. Add a title or name method to your model, which rails_admin will use instead of displaying "User #1".

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

You can use title instead of name, but in your case it makes more sense to use name.

like image 157
Brice Durand Avatar answered Nov 12 '22 09:11

Brice Durand


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

or

config.model full_name do
  object_label_method do
    :full_name
  end
end

Then add a full_name method in your model.

like image 37
Benoit B. Avatar answered Nov 12 '22 09:11

Benoit B.


I do this like for 'Role' model

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

def custom_label_method
  "#{role_name}"
end

It works

like image 10
Mayank Avatar answered Nov 12 '22 10:11

Mayank