繁体   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