我將ActiveAdmin添加到成熟的應用程序中,難以讓路由生成爲belongs_to關係工作。下面是類關係:如何在ActiveAdmin belongs_to中解析vanity_url?
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作業控制器中,「awesome_project」的project_id
值不會導致正確的父對象。如果我將路由生成更改爲admin_project_jobs_path(@project.id)
以使用對象的ID而不是vanity_url,則會生成類似/admin/projects/215/jobs
的路徑,該路徑可以正確解析。然而ActiveAdmin會生成其他路徑並使用那些使用該對象的方法,這會解析回vanity_url,所以我無法永遠支持這個問題。
我已經通過代碼讀取了解路徑的生成位置,但似乎真正的解決方案應該位於Project或Job ActiveAdmin對象中。我已經嘗試將自定義find_resource
塊放到兩個塊中,但沒有找到應該做的事情。
有沒有人與這種情況下工作,或瞭解更多關於如何解決ActiveAdmin資源?謝謝。
謝謝你,蒂莫,這是非常有益的。我還必須刪除我在嘗試其他路徑時所做的自定義「find_resource」和「def index」,以及更新所有路徑幫助程序以使索引和顯示頁面正確呈現。 –