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