rails_admin display name instead of id

2019-02-01 21:23发布

问题:

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)

回答1:

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.



回答2:

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.



回答3:

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



回答4:

You can use rails_admin object_label_method

See link

For User model, in rails_admin.rb

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

In model create method

def custom_label_method
  "User #{user_name}"
end


回答5:

Simply add this in your User Model :

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

Then restart server.

You must add both to_s and title method and you can change self.name by whatever you want from your User schema.

It works for me with Rails 4.



回答6:

With something as generic as name I usually add a method on the model. But alternative solution is to configure label for the field in RA