acts as treeを試す!

スレッド式の掲示板的な継承するテーブルとモデルを作ったのが、Railsを初めて直ぐの頃。

親子関係問題(子の子とか親の親とか探すのが面倒な構造)

自力で親子関係の状況を調べて配列にするコードを書いていたら「何?この部分って・・・読みにくい」と苦言を頂いた。

Rails本とかで調べると「acts as tree」ってのがよさそうだ。
日本語でわかりやすい説明をしているサイトを探したけど見付からない。
ここのPDFを読んだ(http://xibbar.net/acts_as.pdf

 
 
改造を決意したw
 
 

Rails2からプラグインになったらしい。
http://wiki.rubyonrails.org/rails/pages/ActsAsTree

C:\Aptana IDE Beta\roommgr09>ruby script/plugin install acts_as_tree
script/plugin: No such file or directory - svn ls svn://delynnberry.com/code/plu
gins/acts_as_dropdown/trunk/
script/plugin: No such file or directory - svn ls svn://delynnberry.com/code/plu
gins/acts_as_dropdown/trunk/
Plugin not found: ["acts_as_tree"]

あれ?
 
AptanaStudioの「Railsプラグイン」のリストにも表示されていない。
たどり着いたやり方がコレ。

C:\Aptana IDE Beta\roommgr09>ruby script/plugin install http://dev.rubyonrails.org/svn/rails/plugins/acts_as_tree
+ ./README
+ ./Rakefile
+ ./init.rb
+ ./lib/active_record/acts/tree.rb
+ ./test/abstract_unit.rb
+ ./test/acts_as_tree_test.rb
+ ./test/database.yml
+ ./test/fixtures/mixin.rb
+ ./test/fixtures/mixins.yml
+ ./test/schema.rb

vender/plugins/acts_as_treeができあがる。
 
テーブルに「parent_id」が必要らしい。カラム名を変更するのではなく、コピーして様子をみることにした。

mysql> alter table iftbs add parent_id int after fup_name;
mysql> update iftbs set parent_id = fup_name;

 
モデルも改造する

class Iftbs < ActiveRecord::Base
  acts_as_tree


そいで実行結果を眺めて驚愕する。

  • 子から親を調べた場合にparent_idがnilなデータ全てを親と識別する
  • 子の子以降を把握できない

だめじゃん・・・