使用Sinatra时,与数据库通信的最佳方式是什么?

时间:2009-04-22 15:09:31

标签: ruby database orm sinatra

据我了解,与Rails不同,Sinatra框架不提供ORM。在这种情况下,您如何与Sinatra应用程序中的数据库通信?或者Sinatra仅适用于不使用数据库的应用程序?

3 个答案:

答案 0 :(得分:59)

如果你正在使用Sinatra,我不能足够推荐DataMapper。我有几个Rails应用程序,我坚持使用ActiveRecord,而且我一直在诅咒它的缺点和设计缺陷。如果你在Sinatra上,DataMapper是一个非常实用的选择。

require "rubygems"
require "sinatra"
require "datamapper"

DataMapper.setup(:default, "sqlite3::memory:")

class Post
  include DataMapper::Resource

  property :id,    Integer, :serial => true
  property :title, String
end

Post.auto_migrate!
first_post = Post.new
first_post.title = "First!"
first_post.save

get "/" do
  Post.get(1).title
end

答案 1 :(得分:28)

如果您喜欢ActiveRecord,请使用它。或者是其他东西。例如,Datamapper。对于带有SQLite的AR,这可以工作:

require 'rubygems' # may not be needed, depending on platform
require 'sinatra'
require 'active_record'

class Article < ActiveRecord::Base
end

get '/' do
  Article.establish_connection(
    :adapter => "sqlite3",
    :database => "hw.db"
  )
  Article.first.title
end

答案 2 :(得分:0)

由您决定如何与数据库通信,您可以选择其中一个ORM或一些NoSQL适配器。有很多选择,其中一些是专门为Sinatra制作的:

例如,有Sinatra ActiveRecord Extension
最初由Sinatra的创作者Blake Mizerany创作 它使用ActiveRecord辅助方法和Rake任务扩展了Sinatra

另一个选项是Sinatra Sequel Extension 这个小扩展将数据库配置,迁移和续集适配器添加到Sinatra中。

或者sinatra-redis,或者sinatra-mongo,等等。只需搜索你想要的东西。

但是您可以自由使用任何独立的库,查看Sinatra Recipes on databases,其中列出了几个如何使用Sinatra的流行数据库映射器的示例。虽然在那里提到建议的做法是使用DataMapper,但我怀疑这只是一个偏好,因为Sinatra本身没有任何暗示这一点。