読者です 読者をやめる 読者になる 読者になる

move_to_last_child_of

Rails

Better nested setにはmove_to_child_ofというメソッドがあります。
これはどこかの子供にぶらさげてくれるわけなんですけど、
すでにぶら下がっている子供を押し退けて、先頭に収まってしまいます。

18を1の子供に移動しようとして、

./script/runner 'p Section.find(18).move_to_child_of(Section.find(1))'

を実行すると、以下のように先頭に入ってしまいます。

それでは都合が悪いので、move_to_last_child_ofを作りました。

def move_to_last_child_of(node)
  if node.children_count>0
    self.move_to_right_of(node.children.last)
  else
    self.move_to_child_of(node)
  end
end

これでsectionを移動すると以下のようになります。

./script/runner 'p Section.find(18).move_to_last_child_of(Section.find(1))'