Merbをつかってみる〜DataMapper編〜

前回のエントリでも書いたけど、merb-gen resourceを発行しても作られるのは

  • View
  • Model
  • Controler
  • Spec

だけです。

% merb-gen resource hoge:string,huga:text
Loading 〜省略〜
     [ADDED]  spec/models/hoge:string,huga:text_spec.rb
     [ADDED]  app/models/hoge:string,huga:text.rb
     [ADDED]  spec/requests/hoge:string,huga:texts_spec.rb
     [ADDED]  app/controllers/hoge:string,huga:texts.rb
     [ADDED]  app/views/hoge:string,huga:texts/index.html.erb
     [ADDED]  app/views/hoge:string,huga:texts/show.html.erb
     [ADDED]  app/views/hoge:string,huga:texts/edit.html.erb
     [ADDED]  app/views/hoge:string,huga:texts/new.html.erb
     [ADDED]  app/helpers/hoge:string,huga:texts_helper.rb
resources :hoge:string,huga:texts route added to config/router.rb

そう、Migrationのファイルが生成されないんですよね。

ARと違ってDataMapperはModelからDBの形を考えるみたいです。

ARでMigrationファイルに書いていたことはModelに書いてます。

(一応ARみたいにMigrationファイルからマイグレーションもサーポートしている。)

というわけでModelの書き方をわかるとこだけまとめてみた。

項目の定義方法

property :項目名, 型, その他

型で使えるもの

  • Boolean
  • String
  • Text
  • Float
  • Fixnum, Integer
  • BigDecimal,
  • DateTime, Date, Time
  • Object
  • Discriminator

以下はinclude DM-Typesすると使えるらしい(もしかするとMerbだとそのまま使えるかも?)

自分で型を定義する方法もあるみたい

くわしくはここ参照

その他でできること

項目へのアクセス制限

  • :accessor => :privateとか:accessor => :protectedとか
    • :accessorのほかには:writerとか:readerがある

項目の属性

  • :key→主キーにする
  • :serial →自動採番する(型はいらない)
  • :lazy →遅延読み込み
  • :nullable →nullは許すか

その他

  • :default →デフォルト値を設定
  • :field →テーブルカラムを指定
  • :index →インデックスを作成

関連の定義方法

1対Nの関連の場合

1の方は

has n, :piyo

を書いとく
ちなみにpiyoはNのテーブル名
Nの方は

belongs_to :foo

ほかにもできることがかなりあるので調べたら順次追記します