我正在尝试从Rails获取自引用数据。我有一个名为Task
的模型,其代码如下:
class Task < ActiveRecord::Base
has_many :tasks
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_tasks, through: :relationships, source: :followed
scope :orphans, :conditions => "id NOT IN (SELECT DISTINCT followed_id FROM relationships)"
在我的控制器中,我想与他们的孩子(子任务)和孙子孙女一起完成所有任务。 到目前为止,我一直这样做:
@tasks = Task.orphans.to_json(:include => { :followed_tasks => {
:include => :followed_tasks}})
这可能不是最有效的方式,但我能提出的方法是有效的。现在,如果我想要更多级别的嵌套,这个代码很快就会难以维护。我怎样才能改进我的代码,以便能够指定像maxLevelsNum = 4
之类的变量,然后让我的查询以某种方式获取任务,其子任务的深度为四级?
答案 0 :(得分:1)
问题被问到已经有一段时间了,但是,你可以在下面找到一个可能的答案(maxLevelsNum需要大于或等于1):
hash_string = constructHash(maxLevelsNum)
def constructHash(treeDepth)
output = ":include => :followed_tasks"
(2..treeDepth).each do
output = ":include => { :followed_tasks => {" + output + "}}"
end
return "{" + output + "}"
end
@tasks = Task.orphans.to_json(eval(hash_string))