[前][次][番号順一覧][スレッド一覧]

rails:1556

From: Kazuhiko <kazuhiko@f...>
Date: Thu, 24 Aug 2006 12:18:26 +0900
Subject: [rails:1556] Re: 自分自身でhas_manyをしたい

かずひこです。

At Thu, 24 Aug 2006 12:01:32 +0900,
Fujioka wrote:

> ツリー状の組織を表現するテーブルを作っているのですが、

その名も acts_as_tree というのが(標準で)あります。

  create_table(:sections) do |t|
    t.column(:name, :string)
    t.column(:parent_id, :integer)
  end

みたいにテーブルを定義して、

  class Section < ActiveRecord::Base
    acts_as_tree :order => name
  end

みたいにモデルを定義すれば、

  root      = Section.create("name" => "root")
  child1    = root.children.create("name" => "child1")
  subchild1 = child1.children.create("name" => "subchild1")
  subchild2 = child1.children.create("name" => "subchild2")

とすると、

  root
   \_ child1
        \_ subchild1
        \_ subchild2

のような構成ができて、

  root.parent   # => nil
  child1.parent # => root
  root.children # => [child1]
  root.children.first.children.first # => subchild1

のように参照することができます。

詳しくは ActiveRecord::Acts::Tree::ClassMethods のドキュメントをどうぞ。

また、似て非なるものとして acts_as_nested_set というのもあります。
-- 
かずひこ <http://www.fdiary.net/>
  「恋とハックはアジャイルが命!」

--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      1555 2006-08-24 05:01 [fuj@r...            ] 自分自身でhas_manyをしたい              
->    1556 2006-08-24 05:18 ┗[kazuhiko@f...       ]                                       
      1557 2006-08-24 05:41  ┣[fuj@r...            ]                                     
      1558 2006-08-24 07:57  ┗[fuj@r...            ]