在嵌套资源关系中“查找”“父”对象?

时间:2009-01-15 04:07:07

标签: ruby-on-rails rails-routing

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

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

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

有什么想法吗?

2 个答案:

答案 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