初识 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, […]
初识 Sinatra (一) IE 10 开发者指南之索引数据库
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中调用这个类呢?应该不可以吧。
另外报告一个笔误,require ‘datamapper’,这句会报错,后改为require ‘data_mapper’正常
折腾N久,第一个问题终于找到答案了,老大,你比英文原版漏写了一句:
“执行以下指令:
$> irb
ruby-1.9.2-p180 :002 > require ‘./main’
如果没有这一句,你直接执行Task.auto_migrate!肯定会报我上面的错误。看到require ‘datamapper’的错误你已经修正了,辛苦了。
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
详情参考:http://datamapper.org/getting-started
否则会报:
#
#
为什么我redirect ‘/’一直不能get呢