美文网首页sinatra学习
Sinatra学习 day 6

Sinatra学习 day 6

作者: 长物记 | 来源:发表于2015-06-01 12:04 被阅读241次

    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

        本文链接:https://www.haomeiwen.com/subject/mbcdqttx.html