Skill
多くの前提条件 (またはモデル内) を持つモデルがありprereqs
、スキルの前提条件の N レベルの深さのマップを作成する必要があります。この情報を Javascript に渡す必要があるためです (私のcontroller) を使用して、このスキルと他のスキルとの関係を鳥瞰図で示すクレイジーな HTML5/KineticJS アクションを作成します。
現在、以下のコードはうまく機能しており、一貫して 5 レベルの深さをマップしています。
delegate :url_helpers, to: 'Rails.application.routes'
def prereqs_map
prereqs_array = [ self.title.to_s, url_helpers.skill_path(self), Array.new(prereqs) ]
prereqs_array[2] = prereqs_array[2].map do |prereq1|
prereq1 = [ prereq1.title.to_s, url_helpers.skill_path(prereq1), Array.new(prereq1.prereqs).map do |prereq2|
prereq2 = [ prereq2.title.to_s, url_helpers.skill_path(prereq2), Array.new(prereq2.prereqs).map do |prereq3|
prereq3 = [ prereq3.title.to_s, url_helpers.skill_path(prereq3), Array.new(prereq3.prereqs).map do |prereq4|
prereq4 = [ prereq4.title.to_s, url_helpers.skill_path(prereq4), Array.new(prereq4.prereqs).map do |prereq5|
prereq5 = [ prereq5.title.to_s, url_helpers.skill_path(prereq5), [] ]
end ] # prereq depth 5
end ] # prereq depth 4
end ] # prereq depth 3
end ] # prereq depth 2
end # prereq depth 1
return prereqs_array
end
ご覧のとおり、問題は、ネストされたマップが非常に面倒であり、depth
パラメーターを渡して、渡した深さにメソッドをマップする方法を理解する方法がないことです。
これを行うにはもっと良い方法が必要だと思います。何かご意見は?