Electronic Joint Business

Solution for E-Business

初识 Sinatra (二)

文章评价: 在本文的第一部分,我们演示如何配置 Sinatra 并显示了几个页面。现在是真正有趣的部分,在本节中,我们将演示如何用数据库来保存任务。 这里我们会使用 SQLite 作为本地数据库,正如它的名字说表述的,这是一个轻量级的文件数据库,无需任何配置。如果你没有安装过这个数据库,可以参考本页的一些简单介绍。 为了和数据库交互,我们会使用 DataMapper。这个 ORM 的工作方式和 Active Record 类似,但在方法和语法上略有不同。 为了配合 SQLite 使用 DataMapper,下面的 Gem包需要被安装: gem install data_mapper dm-sqlite-adapter sqlite3 我们需在 main.rb 文件的头部添加 DataMapper的请求: require ‘sinatra‘ require ‘data_mapper’ 要使用数据库,我们用了一行代码来设置其连接串,告诉 DataMapper 连接到名为 “development.db”的 SQLite 数据库,该数据库文件将被保存在应用所在目录中。 DataMapper.setup(:default, ENV[‘DATABASE_URL’] || "sqlite3://#{Dir.pwd}/development.db") Task模型 为了将任务项保存到数据库中,我们需要创建一个task类。下面紧跟在 main.rb 的数据库连接串之后: class Task   include DataMapper::Resource   property :id,   […]

, , , , ,

7 thoughts on “初识 Sinatra (二)
  • sphawkcn says:

    irb(main):004:0> Task.auto_migrate!
    NameError: uninitialized constant Task
    from (irb):4
    from d:/Ruby193/bin/irb:12:in `’
    这里不知道咋办了,我也很奇怪,Task不是写在main.rb里面的一个类吗?怎么能够直接在irb中调用这个类呢?应该不可以吧。

  • sphawkcn says:

    另外报告一个笔误,require ‘datamapper’,这句会报错,后改为require ‘data_mapper’正常

  • sphawkcn says:

    折腾N久,第一个问题终于找到答案了,老大,你比英文原版漏写了一句:
    “执行以下指令:
    $> irb
    ruby-1.9.2-p180 :002 > require ‘./main’
    如果没有这一句,你直接执行Task.auto_migrate!肯定会报我上面的错误。看到require ‘datamapper’的错误你已经修正了,辛苦了。

  • daviddeng says:

    require ‘sinatra’
    require ‘data_mapper’
    require ‘slim’

    DataMapper.setup(:default, ENV[‘DATABASE_URL’] || “sqlite3://#{Dir.pwd}/development.db”)

    class Task
    include DataMapper::Resource
    property :id, Serial
    property :name, String, :required => true
    property :completed_at, DateTime
    end

    DataMapper.finalize

    get ‘/’ do
    @tasks = Task.all
    slim :index
    end

    get ‘/:task’ do
    @task = params[:task].split(‘_’).join(‘ ‘).capitalize
    slim :task
    end

    post ‘/’ do
    # @task = params[:task][:name]
    # slim :task
    Task.create params[:task]
    redirect ‘/’
    end

    ———————————————–
    注意其中的DataMapper.finalize

  • daviddeng says:

    详情参考:http://datamapper.org/getting-started
    否则会报:
    #

  • Daniel-Xu says:

    为什么我redirect ‘/’一直不能get呢

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.