1


0

acts_as_treeからネストされたJSONハッシュ

私の目標は、https://stackoverflow.com/questions/180451/using-javascript-and-jquery-to-populate-related-select-boxes-with-arrayで選択した回答に記載されている構造でjsonドキュメントを印刷することです-structur / 180926#180926 [このスレッド]。 サブカテゴリは1レベル(ルートを含む合計2)しか持っていないので、そこにある問題よりも少し簡単になるはずです。 私が抱えている問題は効率性にあります。 ルートカテゴリが20個しかないため、再帰によってスクリプトが非常にゆっくり動作します。 私のコントローラーはこんな感じです:

def categories
    render :text => "var categories = #{Category.main.map { |c| c.with_children }.to_json};"
end

そして、Categoryモデルのそれぞれのメソッド:

def with_children
    {
        :name => self.name,
        :id => self.id,
        :parent_id => self.parent_id,
        :children => self.children.blank? ? nil : self.children
    }
end

このプロセスをより効率的にするためのアドバイスはありますか? たぶん熱心なロードか何か?

1 Answer


1


OK、 "main"はCategoryの名前付きスコープであり、childrenはhas_many関連付けであると仮定しています。 1つのクエリですべてのカテゴリの子を取得する別のスコープをカテゴリに追加できます…​ 何かのようなもの:

    scope :with_children, includes(:children)

これにより、カテゴリごとに1つのクエリを作成して子を取得する代わりに、ロードするすべてのカテゴリの子を取得するクエリを1つだけ作成します。