Отображать имя rails_admin вместо id
Я установил rails_admin в свое приложение, и я хочу сделать что-то довольно простое... У меня две модели, и их ассоциация подходит, как и ожидалось... У меня есть модель регистрации семинара, которая принадлежит_to: user.
В rails_admin перечислены мои пользователи регистрации в качестве пользователя # 1, пользователя # 1 и т.д.
Я бы хотел, чтобы это было имя пользователя. Что мне удалось сделать, так это:
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
Раздел "pretty_value" дает мне текст моего имени пользователя и фамилии... но имеет две проблемы:
1) Это уже не ссылка. Если я оставлю значение по умолчанию (User # 1, User # 2 и т.д.), Он предоставит ссылку этому пользователю. Как мне вернуть эту ссылку? Как rails_admin определяет его пути?
2) Кажется ужасно неуклюжим, чтобы искать вверх по id прямо здесь, в моей форме...
Извините, если это основной вопрос. Я прочитал руководство и поднял другие вопросы, но он еще не совсем "щелкнул" для меня. Я также довольно новичок в рельсах.
Спасибо.
Мне пришлось сделать это, чтобы заставить его работать со ссылкой:
Я добавил вспомогательный метод для полного имени, как было предложено, но сохранил его в моих помощниках:
module ApplicationHelper
def full_name(user_id)
user = User.find(user_id)
user.first_name + " " + user.last_name
end
end
Затем я изменил раздел "pretty_value" следующим образом:
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
В принципе, чтобы получить доступ к любому помощнику вида (рельсы сделаны или иначе), вы должны добавить указатели [: view].my_tag_to_use
Чтобы получить маршрут rails_admin для пользователя, например, вы можете:
bindings[:view].rails_admin.show_path('user', user_id)
Ответы
Ответ 1
Я наткнулся на этот вопрос в google и нашел гораздо более простой способ сделать это. Добавьте к вашей модели метод title
или name
, который rails_admin будет использовать вместо отображения "Пользователь №1".
class User
...
def name
first_name + " " + last_name
end
...
end
Вы можете использовать title
вместо name
, но в вашем случае имеет смысл использовать имя.
Ответ 2
RailsAdmin.config {|c| c.label_methods << :full_name}
или
config.model full_name do
object_label_method do
:full_name
end
end
Затем добавьте метод full_name в вашу модель.
Ответ 3
Я делаю это как для модели "Роль"
config.model 'Role' do
object_label_method do
:custom_label_method
end
end
def custom_label_method
"#{role_name}"
end
Работает
Ответ 4
Просто добавьте это в свою модель пользователя:
# Prety User name display for rails_amdin
def to_s
return self.name
end
def title
return self.to_s
end
Затем перезапустите сервер.
Вы должны добавить как метод to_s
, так и title
, и вы можете изменить self.name
тем, что вы хотите от своей пользовательской схемы.
Он работает для меня с Rails 4.
Ответ 5
С чем-то общим, как имя, я обычно добавляю метод в модель. Но альтернативным решением является настройка метки для поля в RA
Ответ 6
Вы можете использовать rails_admin object_label_method
См. ссылку
Для модели пользователя в rails_admin.rb
config.model 'User' do
object_label_method do
:custom_label_method
end
end
В способе создания модели
def custom_label_method
"User #{user_name}"
end