SS::Document

シラサギの全モデルが include しているモジュールで、次の基本機能を提供します。

created, updated フィールド

ttt メソッド

seqid メソッドと SS::Fields::Sequencer モジュール

embeds_ids

Deep dive into embeds_ids

Mongoid の Has And Belongs To Many の説明の中で 次のような物理データが出てきます。

# The band document.
{
  "_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
  "tag_ids" : [ ObjectId("4d3ed089fb60ab534684b7f2") ]
}

# The tag document.
{
  "_id" : ObjectId("4d3ed089fb60ab534684b7f2"),
  "band_ids" : [ ObjectId("4d3ed089fb60ab534684b7e9") ]
}

これは band(4d3ed089fb60ab534684b7e9) から tag(4d3ed089fb60ab534684b7f2) を参照し、tag(4d3ed089fb60ab534684b7f2) からも band(4d3ed089fb60ab534684b7e9) を参照しており、互いが互いを参照する構図を表しています。

シラサギでは、一般的にこのような参照の仕方はしません。 例として、シラサギのユーザーは複数のグループに所属し、グループは複数のユーザーを持ちます。 シラサギのユーザーとグループがどのように参照を持つか下に取り上げています。

# ss_user document.
{
  "_id" : 4,
  "name" : "一般ユーザー2",
  "uid" : "user2",
  "group_ids" : [ 6 ]
}

# ss_group document.
{
  "_id" : 6,
  "name" : "シラサギ市/危機管理部/管理課",
  "order" : 60
}

シラサギでは一方にのみ配列で参照を保持しており、上の例では、ユーザー(4)がグループ(6)への参照を持っていますが、グループ(6)はユーザーへの参照を持っていません。

一方にのみ配列で参照を保持するのがシラサギの一般的な参照の定義方法です。グループ(6)に所属するユーザーを取得したい場合は SS::User.where(group_ids: 6) とします。

主としてパフォーマンス上の理由から互いに参照を持ち合う場合もあるかもしれませんが、上記のように一方だけに参照を保持したほうがデータの不整合を起こしにくくなると思います。

label

keyword_in スコープ

search_text スコープ

permit_params と permitted_fields メソッド

addon, addons, lookup_addons メソッド

SS::Fields::Normalizer モジュール

基本的なフィールド正規化としてシラサギでは次の機能を提供します。