ManifestProfiler@ AboutManifest

記述例

profilers = {
  item_name1: {
    columns: [
      'id', 
      'title', 
    ],
    lists: {
      'scroll_panels.by_scroll': {
        model_name: 'scroll_panel',
        list_name: 'by_scroll',
      }, 
    }, 
    associations: {
      has_many: [
        'scroll_panels.by_scroll', 
      ],
    }, 
  },
  item_name2: {

各アイテム(この場合、item_name1およびitem_name2)に対して、出力に必要なすべてのパラメータを設定する。プロファイラーは大きく分けて二つの情報を出力する。一つはアイテムのカラム一覧、もう一つはアイテムと関係のあるアイテム一覧。

  • columns 表示中アイテムのカラムの一覧を表示するための設定
  • lists 関連アイテム一覧を取得するための設定
  • associations 表示中アイテムに関連したアイテム一覧を表示するための設定

カラム一覧はモデルのマニフェストから取得できる。この設定は必ずしも必要かというとそうでもない。しかし、マニフェストのカラム一覧はハッシュ形式を採用しているので、並び順が保証されていない。それを保証するための設定をここで行う。

関連モデル一覧もモデルのマニフェストから取得できる。しかし、どの一覧を使うべきかはプロファイラーにはわからない。そこで、モデルの一覧に橋渡しするための設定をここで行う。さらに、並び順を保証するため、配列で設定する。橋渡しするための情報はハッシュである必要があるのに対し、表示するための情報は配列である必要があることになる。一度に定義するのは無理なのでlists, associationsの二段階で設定する。

columns

このアイテムのカラム一覧に関して、文字列の配列で設定する。省略したときは空の配列が補充される。

アイテム名が一致するモデルからカラム情報取得する。

lists

プロファイラーとモデルを橋渡しするための設定。モデルのリストにリンクするには、アイテム名とリスト名の二つの情報が必要となる。プロファイラーが必要とするすべてのリストについて、この二つの情報をペアで設定する

形式はname > valueである。

model_name

関連モデルのアイテム名を文字列設定する。省略はできない。

list_name

リスト名を文字列で設定する。省略はできない。

次の例では、scroll_panelモデルのby_scrollリストをプロファイラーで利用できるようにしている。

    lists: {
      'scroll_panels.by_scroll': {
        model_name: 'scroll_panel',
        list_name: 'by_scroll',
      }, 
    }, 

原則としてリストグループとリストはコントローラとアクションに一致していることになっているので、ここからリストを取得するためのAPIのURLを導出できる。

associations

このアイテムの関連モデルに関してhashで次の三種類を設定する。省略したときは空のhashが補充される。

  • belongs_to
  • has_many
  • has_one

belongs_to

このアイテムが所属するアイテム名を文字列の配列で設定する。省略したときは空の配列が補充される。

所属関係をトレースするルートは一つしかないので、所持関係とは書式が違う。紛らわしいが間違えないように。

has_many

このアイテムが所有するアイテムを一覧取得するためのリスト名を文字列の配列で設定する。省略したときは空の配列が補充される。

リスト名の記述方法は二つある。一つはプロファイラーのlistsを経由してリストを取得するパターン。もう一つは直接リストを取得するパターンである。

次の例ではスクロールが所有するスクコマの一覧を取得する様に設定している。

  scroll: {
    lists: {
      'scroll_panels.by_scroll': {
        model_name: 'scroll_panel',
        list_name: 'by_scroll',
      }, 
    }, 
    associations: {
      has_many: [
        'scroll_panels.by_scroll', 
      ],
    }, 

直接リストを取得するパターンでは、モデル名とリスト名を.で連結する。次の例でも先ほどと同じように、スクロールが所有するスクコマの一覧を取得する様に設定している。

  scroll: {
    associations: {
      has_many: [
        'scroll_panels.by_scroll', 
      ],
    }, 

'scroll_panels.by_scroll'のようにモデル名とリスト名が.で連結されているのが分かるだろうか。この書式によって二つの情報を一つの文字列で記述できる。これでリストの設定が必要なくなって、幾分かすっきりすると思う。この時にモデル名を複数形から単数形に地味に変換しているので気をつけるように。

has_one

基本的にはhas_manyと同じである。直接リンクの書式の時、モデル名を単数形で記述するところには注意が必要。