我正在将ActiveAdmin添加到成熟的应用程序中,很难让路由生成为belongs_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作业控制器中,"awesome_project“的project_id值并不会导致正确的父对象。如果我将路由生成更改为admin_project_jobs_path(@project.id),以使用对象的ID而不是它的vanity_url,就会产生像/admin/projects/215/jobs这样的路径,这是正确解析的。但是,ActiveAdmin生成其他路径和使用对象的路径,这些路径解决了返回到vanity_url的问题,因此我不能永远回避这个问题。
我已经阅读了代码,以查看在何处生成路径,但似乎真正的解决方案应该在项目或作业ActiveAdmin对象中。我尝试过将定制的find_resource块放在这两个块中,但是还没有找到应该做的事情。
有没有人使用过这样的场景,或者更了解ActiveAdmin资源是如何解析的?谢谢。
发布于 2015-09-11 06:26:39
ActiveAdmin.register Job do
belongs_to :project, :finder => :find_by_title! # or what can find your model
end有关详细信息,请参阅resources#belongs-to
https://stackoverflow.com/questions/32512415
复制相似问题