簡體   English   中英

如何在ActiveAdmin Emirates_to中解析vanity_url?

[英]How to get vanity_url resolved in ActiveAdmin belongs_to?

我正在將ActiveAdmin添加到成熟的應用程序中,並且難以使路由生成工作以適用於Emirates_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”的project_id值不會導致正確的父對象。 如果我將路由生成更改為admin_project_jobs_path(@project.id)以使用對象的ID而不是vanity_url,則將導致類似/admin/projects/215/jobs的路徑,該路徑可以正確解析。 但是ActiveAdmin會生成其他路徑, 這些路徑會使用對象,這些路徑會解析回vanity_url,因此我無法永遠避免此問題。

我通讀了代碼以查看生成路徑的位置,但是真正的解決方案似乎應該在Project或Job ActiveAdmin對象中。 我嘗試將自定義的find_resource塊放到這兩者中,但是還沒有找到可以做的事情。

是否有人在這種情況下工作過,或者是否了解有關如何解決ActiveAdmin資源的更多信息? 謝謝。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM