Prog-me.

Rails中心、機械学習も、インフラもセキュリティも

rails gem: acts_as_nested_set でツリー構造を表現 使い方

acts_as_nested_setってなにをするものかというと、親の下に子、子の下に孫といった階層づけされたデータを簡単にあつかえるようにしてくれるもので、長所としてはそういった階層下されている情報をSQL一発で全て取りだせる事にあるそうだ。

create_table :sections do |t|
      t.column :parent_id, :integer
      t.column :lft, :integer
      t.column :rgt, :integer
      t.column :name, :string
    end
class Section < ActiveRecord::Base
  acts_as_nested_set :options=>{:order=>"id"}
end

parent_idとlft、rgtはacts_as_nested_setがちゃんと動作するのに必要なフィールド。

インスタンスメソッド一覧

  • root?

自分がツリーのトップかどうか

  • child?

自分がどこかにぶら下がっているかどうか?

  • unknown?

自分が迷子かどうか?(親も子もない場合)

  • add_child(child)

自分に子をぶら下げる

  • children_count

自分にぶら下がっている子の総数を返す

  • full_set

自分とぶら下がっている子全てを配列で返す

  • all_children

自分にぶら下がっている子全てを配列で返す

  • direct_children

自分の直接ぶら下がっている子を配列で返す

add_childする時にはaddされる側とする側両方のレコードが実際にテーブル上にないと駄目らしい

 

 

ソース:

2006-09-22 - 福島餃子Ruby親方

acts_as_nested_setと格闘してみる - 四角い車輪のブログ