Я добавляю ActiveAdmin к зрелым приложениям и с трудом получаю, чтобы генерация маршрута работала для отношения belongs_to. Вот класс отношений:Как получить vanity_url в ActiveAdmin принадлежит_to?
class Project < ActiveRecord::Base
def to_param
vanity_url.blank? ? id.to_s : vanity_url
end
end
class Job < ActiveRecord::Base
belongs_to :project
end
Это важно, потому что мы используем маршруты, такие как domain/projects/awesome_project
вместо domain/projects/215
. Все довольно стандартное.
В ActiveRecord, я получил соотношение правильно определяется:
ActiveAdmin.register Project do
end
ActiveAdmin.register Job do
belongs_to :project
end
Я считаю, что это правильно, так как маршрут генерируется включают:
admin_project_jobs GET /admin/projects/:project_id/jobs(.:format) admin/jobs#index
POST /admin/projects/:project_id/jobs(.:format) admin/jobs#create
new_admin_project_job GET /admin/projects/:project_id/jobs/new(.:format) admin/jobs#new
edit_admin_project_job GET /admin/projects/:project_id/jobs/:id/edit(.:format) admin/jobs#edit
admin_project_job GET /admin/projects/:project_id/jobs/:id(.:format) admin/jobs#show
... etc
Когда я использую генератор маршрута, например как admin_project_jobs_path(@project)
, создается правильный маршрут; это: /admin/projects/awesome_project/jobs
.
Проблема в том, что с контроллером ActiveAdmin Jobs значение «awesome_project» не приводит к правильному родительскому объекту. Если я изменю генерацию маршрута на admin_project_jobs_path(@project.id)
, чтобы использовать идентификатор объекта вместо его vanity_url, это приведет к пути, как /admin/projects/215/jobs
, который правильно разрешен. Однако ActiveAdmin генерирует другие пути и те используют этот объект, который разрешает вернуться к vanity_url, поэтому я не могу навсегда решить эту проблему.
Я прочитал код, чтобы узнать, где сгенерирован путь, но похоже, что реальное решение должно быть в объекте Project или Object ActiveAdmin. Я пробовал поставить пользовательские блоки find_resource
в оба, но не нашел того, что делает то, что нужно.
Кто-нибудь работал с таким сценарием или понимает больше о том, как разрешены ресурсы ActiveAdmin? Благодарю.
Спасибо, Тим, это было очень полезно. Мне также пришлось удалить пользовательские «find_resource» и «def index», которые я сделал при попытке других путей, а также обновить все помощники путей, чтобы сделать рендеринг индекса и показа страниц. –