问题
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
来源:https://stackoverflow.com/questions/11658281/rails-admin-display-name-instead-of-id