再開発メモ002
Power モデル
スキーマはこんな感じ。genitive は Order#to_s で使うことになる。
create_table "powers", force: true do |t| t.string "name" t.string "symbol" t.string "genitive" t.datetime "created_at" t.datetime "updated_at" end
seeds.rb はこう。
Power.create symbol:'A', name:'Austria', genitive:'Austrian' Power.create symbol:'E', name:'England', genitive:'English' Power.create symbol:'F', name:'France', genitive:'French' Power.create symbol:'G', name:'Germany', genitive:'German' Power.create symbol:'I', name:'Italy', genitive:'Italian' Power.create symbol:'R', name:'Russia', genitive:'Russian' Power.create symbol:'T', name:'Turky', genitive:'Turkish' Power.create symbol:'X', name:'Master'
Province モデル
最低限必要なフィールドはこれくらいだろうか。
第1案
- shortname: 略称。
- fullname: フルネーム。
- supplycenter: 補給都市の有無。
- homepower: 初期支配国。Power への参照。
今回の地名は jDip 準拠にする予定だが、その場合、shortname が全部小文字になってしまうのが悩みどころ。
なので、小文字略称のフィールド名を code*1 に変更して、code の一文字目を大文字に変換するメソッド Province#shortname を後で用意する。
第2案
- code : 識別子としての略称。全て小文字。
- fullname: フルネーム。
- supplycenter: 補給都市の有無。
- homepower: 初期支配国。Power への参照。
面倒なのが「bul」「spa」「stp」の港の問題。例えば「bul」「bul(ec)」「bul(sc)」は全て別物でありながら、場合によっては同じ地域として扱わなければならない。
ここはシンプルに port フィールドを追加して区別しよう。「bul」の場合、マスタデータは {code:'bul', port:nil}、{code:'bul', port:'ec'}、{code:'bul', port:'sc'} の3レコードになる。これらは Province#code が一致するので同じ地域として扱える。
港のカッコ表記は Province#shortname に任せる。
第3案
- code: 識別子としての略称。全て小文字。
- fullname: フルネーム。
- supplycenter: 補給都市の有無。
- homepower: 初期支配国。Power への参照。
- port: 港。「bul」「spa」「stp」以外は nil。
後はちょっと考えがあるので単一テーブル継承用のフィールド type を追加しておく。
最終案
- code: 識別子としての略称。全て小文字。
- fullname: フルネーム。
- supplycenter: 補給都市の有無。
- homepower: 初期支配国。Power への参照。
- port: 港。「bul」「spa」「stp」以外は nil。
- type: 単一テーブル継承用。
今日はここまで。