Подтвердить что ты не робот

Отображать имя 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)
4b9b3361

Ответ 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