はじめに
NotionRubyMapping 解説の第38回目です。今日は Relation プロパティの追加です。データベースは共通なものを使い回します。また、one-way と two-way の関連用に二つデータベースを追加しました。それぞれ owdb と twdb で読み込みをしておきます。
irb(main):002> db = Database.find "https://www.notion.so/hkob/cad035c49e5346e783 31cb5d05cbc754?v=a03e96ed79ad4d35808e7a08583396a0&pvs=4" => NotionRubyMapping::Database-cad035c49e5346e78331cb5d05cbc754 irb(main):003> owdb = Database.find "https://www.notion.so/hkob/5c0f2cc96679450c 8c9498cd130e015f?v=7a25bec6b89f469da8a980ca39a315e7&pvs=4" => NotionRubyMapping::Database-5c0f2cc96679450c8c9498cd130e015f irb(main):004> twdb = Database.find "https://www.notion.so/hkob/f80ec5b49dee4223 a65c3837a35f2f97?v=3fc4228d0fc8481e8ccc136ebb572326&pvs=4" => NotionRubyMapping::Database-f80ec5b49dee4223a65c3837a35f2f97
RelationProperty (One way relation)
まず、RelationProperty を追加し、rp1 に代入しておきます。
irb(main):005> rp1 = db.add_property RelationProperty, "One Way Relation" => #<NotionRubyMapping::RelationProperty:0x000000011f8f00a0
FormulaProperty は replace_relation_database でリレーションするデータベース ID を設定できます。片方行のみの場合には、type: に single_property を設定します。
irb(main):007> rp1.replace_relation_database database_id: owdb.id, type: "single_property" => {"database_id"=>"5c0f2cc96679450c8c9498cd130e015f", "type"=>"single_property", "single_property"=>{}} irb(main):008> db.save => NotionRubyMapping::Database-cad035c49e5346e78331cb5d05cbc754
One way なので以下のように片方向だけのリレーションになっていることが確認できました。
RelationProperty (Two way relation)
同様に双方向のリレーションを設定してみます。type を省略すると Two way になります。
irb(main):009> rp2 = db.add_property RelationProperty, "Two Way Relation" => #<NotionRubyMapping::RelationProperty:0x00000001049f4390 irb(main):010> rp2.replace_relation_database database_id: twdb.id => {"database_id"=>"f80ec5b49dee4223a65c3837a35f2f97", "type"=>"dual_property", "dual_property"=>{}} irb(main):011> db.save => NotionRubyMapping::Database-cad035c49e5346e78331cb5d05cbc754
正しくリレーションが設定されていることがわかります。two-way 側のプロパティ名は自動的に設定されます。
実際に保存した後の rp2 を確認してみると以下のようになっています。実際に dual_property の中の synced_property_name にその自動生成されたプロパティ名が入っています。この名前を変更した時に、two way 側のデータベースのプロパティ名が変更されるのかどうかは不明です。多分ダメだったような気がしていますが、今度試してみます。
irb(main):012> rp2 => #<NotionRubyMapping::RelationProperty:0x00000001049f4390 @base_type=:database, @create=false, @json= {"database_id"=>"f80ec5b4-9dee-4223-a65c-3837a35f2f97", "type"=>"dual_property", "dual_property"=> {"synced_property_name"=>"Related to parent (Two Way Relation)", "synced_property_id"=>"wP%3CH"}}, @name="Two Way Relation", @new_name=nil, @property_cache=PropertyCache, @property_id=nil, @query=nil, @remove=nil, @will_update=false>
おわりに
今回は、うまく RelationProperty を生成しました。片方向の場合と双方向の場合で設定方法が異なりますので注意してください。
RelationProperty のマニュアルはこちらです。