如何在 ActiveAdmin belongs_to 中解决 vanity_url?
How to get vanity_url resolved in ActiveAdmin belongs_to?
我正在将 ActiveAdmin 添加到一个成熟的应用程序中,但很难让路由生成为 belongs_to 关系工作。这是 class 关系:
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 资源?谢谢。
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
我正在将 ActiveAdmin 添加到一个成熟的应用程序中,但很难让路由生成为 belongs_to 关系工作。这是 class 关系:
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 资源?谢谢。
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