假设我有两个资源,Project和Task。一个项目可以有很多任务;任务属于一个项目。还要说我在routes.rb中的Project下嵌套了Task:
map.resources :projects do |project|
project.resources :tasks
end
可以通过编程方式发现这种关系吗?基本上,我需要动态加载任意对象,然后确定它是否有“父”,然后加载该父对象。
有什么想法吗?
答案 0 :(得分:1)
路由不会帮助你,因为这只是用于反过来。 您可以做的是将关系别名化为:parent:
class Task
belongs_to :project
alias :project :parent
end
然后使用此关系来检测父对象是否可用:
if object.respond_to?(:parent)
# do something
end
此外,如果路由设置正确,您可以使用多态路由:
polymorphic_url([object.parent, object])
答案 1 :(得分:0)
上面的代码确定了路由的关系,并帮助生成正确的帮助程序以创建路径等。
您需要确保在您的婚姻中正确宣布关系。在项目模型中,您应该:
has_many :tasks
在您的任务模型中,您应该:
belongs_to :project
一旦你完成了设置,你就可以得到你想要的东西了。
@task = Task.first
unless @task.project.blank?
project_name = @task.project.name
end