据我了解,与Rails不同,Sinatra框架不提供ORM。在这种情况下,您如何与Sinatra应用程序中的数据库通信?或者Sinatra仅适用于不使用数据库的应用程序?
答案 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本身没有任何暗示这一点。