PRGパターン

今日の作業

実装やRails本を見て学習
PRGパターンのチェック

今日の作業でわかったこと&わからなかったこと

DB移行手順
$>rake db:schema:dump

$>rake db:fixtures:dump model=....

を実行しスキーマとデータの情報をdumpする
次に
database.ymlとtnsnames.ora
を書き換え

$>rake db:schema:load

$>rake db:fictures:load

を実行

調べたことのまとめ

acts_as_list

親から見て子をリストのように動作させる。
親は子を1つずつ調べること、位置を変えること、削除することができるようになる。
リストはこの一つ一つに位置番号を割り当てる。
そのため子テーブルには位置番号を格納する為のpositionという列が必要になる。

class Parent < ActiveRecord::Base
  has_many :children, :order => :position
end
class Child < ActiveRecord::Base
  belong_to :parent
  acts_as_list :scope => :parent_id
end

Prentクラスではposition列の値に基づき子を並べます。
Childクラスではbelong_toで親と接続を確立し、act_as_listも宣言している。
:scopeオプションはリストが親ごとに対応していることを示している。
リスト内を操作するには
move_higher() その子オブジェクトを一つ下の子オブジェクトと入れ替えます。
move_lower() その子オブジェクトを一つ上の子オブジェクトと入れ替えます
move_to_bottom() その子オブジェクトをリストの先頭に移動させます
move_to_top() その子オブジェクトをリストの末尾に移動させます
などのメソッドがある。

acts_as_tree

テーブルの行を階層型またはツリー型で管理することができる。
このツリー構造はテーブルに一つの列(デフォルトはparent_id)を追加することによって実現できる。
この列は同じテーブルの外部キー参照であり、
子の行を親の行にリンクする。
root()…ツリーを開始するオブジェクト。
children()…現在のオブジェクト直下の子要素全て。
parent()…現在のオブジェクトの直上の祖先。

明日の作業

PRGパターンチェックの続き