スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Merb]DataMapperを触ってみる

MerbのDataMapperを触ってみました。
RailsのActiveRecordすらまともに触ったことがないので手探りな感じです。

まずサンプルのModelを作ります。

merb-gen model entry title:string,content:string
merb-gen model comment content:string,entry_id:integer



記事とそれに関連づくコメントというイメージです。
次に2つのモデルを1対Nの関係にするため、Modelを修正します。

vi app/models/entry.rb

class Entry
 include DataMapper::Resource

 property :id, Serial

 property :title, String
 property :content, String

 has n, :comments
end

vi app/models/comment.rb

class Comment
 include DataMapper::Resource

 property :id, Serial

 property :entry_id, Integer
 property :content, String

 belongs_to :entry
end



DBを作成してサーバーを起動します。

rake db:automigrate
merb -i



entryテーブルにレコードを追加します。

entry = Entry.new(:title=>"タイトル1", :content=>"内容1")
entry.save



こんな書き方もできます。

entry = Entry.new
entry.title = "タイトル2"
entry.content = "内容2"



次はcommentテーブルにレコードを追加します。

comment = Comment.new(:content=>"タイトル1のコメント1", :entry_id=>1)
comment.save



entryとcommentを関連づけていますので、一発で保存することもできました。
(内部では2つのSQLが発行されています。)

entry = Entry.new(:title=>"タイトル3", :content=>"内容3")
comment = Comment.new(:content=>"タイトル3のコメント1")
entry.comments.push(comment)
entry.save



entry_idという名前を自動的に関連づけるIDと見なしてくれるようです。

次は検索ということで全件取得します。

entries = Entry.all



IDを指定して取得します。

entry = Entry.get(1)



取得フィールドを限定します。

entry = Entry.all(:fields => [:id, :title])
entry = Entry.get(1, :fields => [:id, :title])



ソートを指定してみます。

entries = Entry.all(:order => [:id.desc])



取得件数を絞ります。

entries = Entry.all(:order => [:id.desc], :offset => 1, :limit => 2)



commentを取得します。

entry = Entry.get(1)
entry.comments.each do |comment|
 puts comment.content
end



entryオブジェクトのメンバとしてアクセスできるわけですね。

今までガリガリSQL文を書いてきた経験しかないので
このオブジェクトを操作する感覚で、データを操作できるところがとても新鮮です。

結合して取得したり、複雑な検索条件をどうさばけばいいのかが気になるところです。
継続して調べていきたいと思います。

コメントの投稿

非公開コメント

プロフィール

jou4

Author:jou4
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。