Администрировать gem — как показать атрибут, которого нет в целевой модели в качестве столбца, на странице индекса

#ruby-on-rails #ruby #rubygems #administrate #rails-administrate

Вопрос:

Я пытаюсь показать атрибуты, которых в модели нет в качестве столбца.

Например, я хочу показать «total_salary» на панели управления индексом пользователя. Схема пользовательской модели выглядит следующим образом,

 id int
name string
age int
 

Как и выше, в пользовательской модели нет столбца «total_salary».

Я изменил страницу панели мониторинга, которая была автоматически сгенерирована administrate gem.

До

 ATTRIBUTE_TYPES = {
 id: Field::Number
 name: Field::String
 age: Field::Number
}

COLLECTION_ATTRIBUTES = {
 id: Field::Number
 name: Field::String
 age: Field::Number
}

 

После

 ATTRIBUTE_TYPES = {
 id: Field::Number
 name: Field::String
 age: Field::Number
 total_salary: Field::Number # Changed 
}

COLLECTION_ATTRIBUTES = {
 id: Field::Number
 name: Field::String
 age: Field::Number
 total_salary: Field::Number # Changed 
}
 

Где добавить логику для расчета общей заработной платы каждого пользователя?
(Если файловая ведьма уже существует, пожалуйста, укажите мне путь к файлу. Если мне нужно создать новый файл или папку, пожалуйста, научите меня, где это сделать.)

Спасибо,

Ответ №1:

Похоже, вам нужно пользовательское поле, так total_salary как оно не сопоставляется со столбцом. Для этого вам нужно добавить класс для его вычисления:

 # app/fields/total_salary_field.rb

class TotalSalaryField < Administrate::Field::Base
  def total_salary
    # Perform calculation here
  end
end
 

а потом сделайте:

 ATTRIBUTE_TYPES = {
  ...,
  total_salary: TotalSalaryField,
  ...
}
 

Вот ссылка на документацию для пользовательских типов полей: https://administrate-demo-prerelease.herokuapp.com/adding_custom_field_types