2012-05-05 19 views
1

Railsから自己参照データを取得しようとしています。私は自分の子供(サブタスク)と孫とのタスクのすべてを取得したいと思い、私のコントローラで任意レベルの自己参照階層モデルを取得する

​​

:私は、次のコードでTaskというモデルを持っています。 は、これまでのところ、私はこれをやっている:

@tasks = Task.orphans.to_json(:include => { :followed_tasks => { 
:include => :followed_tasks}}) 

おそらく最も効率的な方法ではありませんが、私はそれが作品に出てくる可能性が一つであること。今度は、より多くのレベルの入れ子にしたい場合、このコードはすぐに維持するのが難しくなります。どのようにしてmaxLevelsNum = 4のような変数を指定できるようにコードを改善し、次に私のクエリでサブタスクが4レベル深いタスクを何とか取得できますか?

答えて

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)) 
関連する問題