有没有办法在rails中处理代理关联?

时间:2013-11-05 19:37:33

标签: ruby-on-rails ruby activerecord

说我有一个Person和一个Task表。一个人可以有很多任务,但有时候,一个人可以完成一项由其他任务组合的重大任务。所以我为此插入了多行任务,分组。但我不想添加像BigTask这样的其他表。

有没有办法通过代理来处理创建任务,比如

人员通过代理(摘要)与任务相关联。

这样我就可以保存并初始化一个Proxy,这将给我一个包含0个或更多Task对象的数组。

1 个答案:

答案 0 :(得分:0)

充实上述评论中表达的观点,我相信这样的事情应该有效:

class Task < ActiveRecord::Base
  belongs_to :person
  belongs_to :big_task, class_name: "Task"
  has_many :sub_tasks, class_name: "Task", foreign_key: "big_task_id"
end

class Person < ActiveRecord::Base
  has_many :big_tasks, class_name: "Task"
  has_many :tasks
  has_many :sub_tasks, through: tasks
end

然后,当然,您需要在Task模型上定义“big_task_id”字段,以便将其与“大任务”相关联。

这应该启用以下内容:

p = Person.find(id)
biggie = p.tasks.create(title: "Clean house")
biggie.tasks.create(title: "Vaccuum")
biggie.tasks.create(title: "Wash Windows")
p.tasks.count # 3
p.sub_tasks.count # 2
p.big_tasks.count # 1