2015-09-10 23 views
0

我將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資源?謝謝。

回答

1
ActiveAdmin.register Job do 
    belongs_to :project, :finder => :find_by_title! # or what can find your model 
end 

欲瞭解更多詳情,請參閱https://github.com/josevalim/inherited_resources#belongs-to

+0

謝謝你,蒂莫,這是非常有益的。我還必須刪除我在嘗試其他路徑時所做的自定義「find_resource」和「def index」,以及更新所有路徑幫助程序以使索引和顯示頁面正確呈現。 –

相關問題