34

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

4

3 回答 3

63

如果您使用的是 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
于 2009-04-24T18:01:53.050 回答
31

如果您喜欢 ActiveRecord,请使用它。或者是其他东西。例如,数据映射器。对于带有 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
于 2009-04-22T15:24:58.057 回答
0

如何与数据库通信取决于您,您可以选择 ORM 之一或一些 NoSQL 适配器。有许多可用选项,其中一些是专门为 Sinatra 制作的:

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

另一种选择是Sinatra Sequel Extension
这个小型扩展将数据库配置、迁移和 Sequel 适配器直接添加到 Sinatra。

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

但是您也可以自由使用任何独立的库,查看数据库上的 Sinatra 食谱,其中列出了几个如何将流行的数据库映射器与 Sinatra 一起使用的示例。尽管那里提到建议的做法是使用 DataMapper,但我怀疑这只是一种偏好,因为 Sinatra 本身没有任何建议。

于 2015-07-24T08:18:43.247 回答