はじめに
NotionRubyMapping 解説の第10回目です。RichTextArray の解説が済んだので、段落ブロックの追加を行う append_block_children
メソッドを解説します。今日は以下のページで
Page#append_block_children
ページもブロックなので、append_block_children
メソッドにより子ブロックを追加できます。上のページに段落ブロックを追加してみます。まず、ページを取得します。
irb(main):002> page = Page.find "https://www.notion.so/hkob/append_block_childre n-10-573b218d93fc405b9bf467ac2ac2928d?pvs=4" => NotionRubyMapping::Page-573b218d93fc405b9bf467ac2ac2928d
取得したページに append_block_children
でブロックを渡すとページの最後に追加されます。この時ブロックは複数個指定できます。
irb(main):003> page.append_block_children ParagraphBlock.new("最初の段落"), ParagraphBlock.new("二番目の段落") => [NotionRubyMapping::ParagraphBlock-2f8b551fdf924add8f46db4871237522, NotionRubyMapping::ParagraphBlock-aa735b8fa78a403eb96fb4091b31e83e]
実行した結果、ページには二つの段落ブロックが追加されました。
当初、ブロックは一番最後にしか追加できませんでしたが、その後のアップデートで after
を設定できるようになりました。after
には block_id
を指定します。上の最初の段落の後ろに段落を追加してみます。
irb(main):004> page.append_block_children ParagraphBlock.new("追加した段落"), af ter: "2f8b551fdf924add8f46db4871237522" => NotionRubyMapping::ParagraphBlock-758dd263cac64e5ebc1f1264ba6b48d0
結果は以下のようになりました。
Block#append_after
append_block_children
の after
オプションは Notion API の指定通りなのですが、block_id
を指定するのがあまりカッコいいものではありません。そこで、append_after
というメソッドを用意してみました。最初のブロックを取得し、その後ろに append_after
で段落ブロックを追加してみます。
irb(main):005> first_block = page.children.first => NotionRubyMapping::ParagraphBlock-2f8b551fdf924add8f46db4871237522 irb(main):006> first_block.append_after ParagraphBlock.new("さらに追加した段落") => NotionRubyMapping::ParagraphBlock-cefd3be7bf2b4025bc374f55c44b0d82
結果は以下のようになりました。
c
Block#append_block_children
ブロックの中には子ブロックを持つことができるものがあります。段落ブロックも子ブロックを持つことができるブロックです。先ほど取得した first_block
に append_block_children
で子ブロックを追加してみます。
irb(main):007> first_block.append_block_children ParagraphBlock.new("子ブロックの追加") => NotionRubyMapping::ParagraphBlock-4e2f4da82d5043e68b24469663293435
結果は以下のようになりました。
おわりに
すでに紹介した段落ブロックをページに追加する append_block_children を解説しました。また、通常はブロックの一番最後に設置されるのですが、after オプションで場所を指定することができます。残念ながら after しかオプションがないので、一番先頭には追加できないです。また、オプションの設定は面倒なので、append_after というメソッドも用意しています。こちらは親のページやブロックではなく、追加したい場所の前のブロックに対してメソッドを投げる形になります。
Page, Block のマニュアルはこちら。