いつ使う: プロジェクト管理 (Project → Phase → Task)、組織図 (会社 → 部 → 課 → 社員)、ECサイト (注文 → 配送 → 配送アイテム) など、親→子→孫と 3 段以上の階層でレコードが連なる構造。
- プロジェクトの詳細画面を開くと、フェーズの一覧が見える
- フェーズの行 (or 詳細) を開くと、そのフェーズに紐づくタスクが見える
- プロジェクト → フェーズ → タスクの順に深掘りできる
projects phases tasks
├── id PK ←─────────┤ ├── id PK ←──────────┤ ├── id PK
├── name │ ├── project_id FK │ ├── phase_id FK
└── owner ├ ├── phase_name ├ ├── title
├ ├── start_date ├ ├── assignee
└ ├── end_date └ ├── is_done
└ ...
3 段ネスト: projects.id ← phases.project_id、phases.id ← tasks.phase_id。
| モジュール | テーブル | 役割 | 主な参照 |
|---|---|---|---|
Project |
Projects |
親 (最上位) | Phases (ListField → Phase) で子を逆引き |
Phase |
Phases |
子 (中間) | ProjectId で親を指す + Tasks (ListField → Task) で孫を逆引き |
Task |
Tasks |
孫 (最深) | PhaseId で親を指す |
各層に ListField を置いて、その下の層を SearchCondition で逆引き表示する:
Project.PhasesのSearchCondition:Phase.ProjectId == this.Id.Valueで絞り込みPhase.TasksのSearchCondition:Task.PhaseId == this.Id.Valueで絞り込み
各層は通常の CRUD モジュール。詳細画面に下層の ListField を置くことで、ドリルダウンの形になる。
サイドバー データ操作/多段ネスト → Project + Phase + Task
- 各階層の Submit は基本的にその階層単独 (孫を含む全 Submit ではない)。トランザクション境界を意識する
- 多段でネストが深くなると、画面が縦長になりがち。
ListFieldは別画面遷移、DetailListFieldはインライン、と使い分ける
- アプリ作成パターン一覧 ─ 全パターンのインデックス
- ヘッダ詳細 (1:N) ─ 2 段の親子関係 (多段ネストの基本形)
- モジュール定義の全体構造
- Field リファレンス ─ ListField / DetailListField の詳細
