ruby database orm sinatra

ruby - ¿Cuál es la mejor manera de hablar con una base de datos mientras usa Sinatra?



database orm (3)

Depende de usted cómo comunicarse con una base de datos, puede elegir cualquiera de los ORM o algún adaptador NoSQL. Hay muchas opciones disponibles, algunas de ellas fueron hechas especialmente para Sinatra:

Por ejemplo, hay una extensión ActiveRecord de Sinatra
Originalmente creado por Blake Mizerany, creador de Sinatra
Extiende Sinatra con métodos de ayuda ActiveRecord y tareas de Rake

Otra opción es Sinatra Sequel Extension .
Esta pequeña extensión agrega configuración de base de datos, migraciones y adaptadores Sequel directamente a Sinatra.

O sinatra-redis, o sinatra-mongo, y así sucesivamente. Solo busca lo que quieras.

Pero también puedes usar libremente cualquier biblioteca independiente, echa un vistazo a las Recetas de Sinatra en las bases de datos , donde se enumeran algunos ejemplos de cómo usar los mapeadores populares de bases de datos con Sinatra. Aunque se menciona allí que la práctica sugerida para esto es usar DataMapper, sospecho que esto es una mera preferencia, porque nada en Sinatra sugiere esto.

Según lo entiendo, el marco de Sinatra, a diferencia de Rails, no proporciona un ORM. En ese caso, ¿cómo hablas con un DB en una aplicación Sinatra? ¿O es Sinatra solo para aplicaciones que no usan una base de datos?


Si está utilizando Sinatra, no puedo recomendar DataMapper suficiente. Tengo un par de aplicaciones de Rails en las que estoy atascado con ActiveRecord, y maldigo constantemente sus fallas y defectos de diseño. Si estás en Sinatra, DataMapper es una opción muy práctica.

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


Si te gusta ActiveRecord, úsalo. O algo mas. Datamapper, por ejemplo. Para AR con SQLite, esto funciona:

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