1

假设我有两个资源,项目和任务。一个项目可以有很多任务;一个任务属于一个项目。还说我在 routes.rb 的 Project 下嵌套了 Task:

map.resources :projects do |project|
  project.resources :tasks
end

可以以编程方式发现这种关系吗?基本上,我需要动态加载一个任意对象,然后确定它是否有一个“父级”,然后加载那个父级。

有任何想法吗?

4

2 回答 2

1

路由不会帮助你,因为这只是为了反其道而行之。您可以做的是将与 :parent: 的关系别名化


class Task
  belongs_to :project
  alias :project :parent
end

然后使用这个关系来检测是否有父对象可用:


if object.respond_to?(:parent)
  # do something
end

此外,如果路由设置正确,您可以使用多态路由:


polymorphic_url([object.parent, object])
于 2009-01-15T09:48:53.297 回答
0

您上面的代码确定了路线的关系,并帮助生成正确的助手来创建路径等。

您需要确保在您的madels 中正确声明了这些关系。在项目模型中,您应该具有:

has_many :tasks

在您的任务模型中,您应该具有:

belongs_to :project

一旦你设置好了,你就可以得到你想要的了。

@task = Task.first

unless @task.project.blank?
  project_name = @task.project.name
end
于 2009-01-15T07:10:38.687 回答