Функциональность ActiveAdmin по умолчанию заключается в поиске поля name
в данной модели при принятии решения о том, что отображать в качестве идентификатора записи. Если модель не имеет поля name
, ActiveAdmin не может как-либо разрешить вам, с какой записью вы имеете дело, кроме возможности показать вам строковый беспорядок в месте, где эта запись находится в памяти (это та же строка, которую вы получили бы, если бы вы сделали Category.first.to_s
в консоли).
Чтобы заставить ActiveAdmin распознавать имя, вы должны переопределить форму редактирования по умолчанию, которую он создает для вас, чтобы вы могли настроить выбор метка.
Вы добавите в форму все поля, которые хотите редактировать. Когда вы добавляете ввод для категории, вы указываете, что хотите, чтобы это поле было выбором, и вы можете настроить метку выбора, например так:
# app/admin/product.rb
ActiveAdmin.register Product do
permit_params :title, :description, :availability,
:price, :photo_link, :category_id, :advert, :pictureOne,
:pictureTwo, :pictureThree
form do |f|
f.inputs do
# Add a form input for the category
#
# This approach also allows you to specify which categories you
# allow to be selected, in the "collection" attribute.
#
# Inside the "map" call, you have the proc return an array with the first item
# in the array being the name of the category (the label for the select)
# and the second item being the category's ID (the select's value)
f.input :category_id, label: 'Category', as: :select, collection: Category.all.map{ |c| [c.category_name, c.id]}
# Then add other inputs
f.input :title
f.input :description
f.input :availability
# ...
# (Add f.input for the rest of your fields)
end
f.actions
end
end
Вы будете использовать аналогичные методы, когда вам нужно Чтобы отобразить имя категории в других местах ActiveAdmin.
Если это не так уж и сложно, вам, вероятно, будет лучше переименовать category_name
в вашей модели категории в name
. Таким образом, вы будете бороться с ActiveAdmin намного меньше, и вам не нужно будет делать подобные настройки.