据我了解,与 Rails 不同,Sinatra 框架不提供 ORM。在这种情况下,您如何与 Sinatra 应用程序中的数据库通信?还是 Sinatra 仅适用于不使用数据库的应用程序?
3 回答
如果您使用的是 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
如果您喜欢 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
如何与数据库通信取决于您,您可以选择 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 本身没有任何建议。