Sinatra学习 day 6

Date: 2013-04-09
Title: DataMapper
Tags: ruby,datamapper

学习sinatra的时候,自然会到选择ORM(Object Relational Mapper)的这一步。

ruby的ORM还是蛮多的,比较流行的有rails的ActiveRecord,DataMapper,Sequel。

为什么选择DataMapper呢?我的原因很简单,Sinatra和DataMapper一起出现的次数比较多。那种性能,效率什么的东西对我一个业余选手来说太高深了。

安装很简单

gem intall data_mapper

然后根据数据库选择adapter

gem install dm-sqlite-adapter

rubygem的使用方法都差不多,直接文件中调用就ok了

require 'rubygems'
require 'data_mapper'

数据库连接

DataMapper.setup(:default,"sqlite://#{Dir.pwd}/test.db)

Mysql和Postgres就要求用户名和密码了

DataMapper.setup(:default,'mysql://user:password@hostname/database')

然后定义自己的model

class Post
    include DataMapper::Resource
    
    property :id, Serial
    property :title, String
    property :body, Text
    property :create_at, DataTime
end

更多参数参考Properties文档和dm-types文档

Associations

一对多

class Post
    has n,:comments
end

class Comment
    belongs_to :post
end

多对多

class Categorization
  include DataMapper::Resource
  property :id,         Serial
  property :created_at, DateTime
  belongs_to :category
  belongs_to :post
end


class Post
  has n, :categorizations
  has n, :categories, :through => :categorizations
end

class Category
  has n, :categorizations
  has n, :posts,      :through => :categorizations
end

最后在model文件添加

DataMapper.finalize

生成表

一种做法是直接在model文件中加入

DataMapper.auto_migrate!

然后把文件运行下就ok啦。
还有一种是在irb中调用model,然后

irb> modelclass.auto_migrate #模型类

现在可以建立对象了

@post= Post.create(
    title:"Title",
    body:"Body",
    created_at:Time.now
    )

CRUD

Create

post=Post.new
post.save

Post.create

Read

Post.all    
Post.get(1) 
Post.first
Post.last
Post.first(title:"Title")

Update

post=Post.first
post.update(title:"New title")

Delete

Post.first.destroy

你可能感兴趣的:(Sinatra学习 day 6)