Domanda

A quanto mi risulta, il quadro Sinatra, a differenza di Rails, non fornisce un ORM. In tal caso, come si fa a parlare con un DB in un'app Sinatra? O è Sinatra solo per le applicazioni che non utilizzano un DB?

È stato utile?

Soluzione

Se ti piace ActiveRecord, usare quella. O qualcos'altro. DataMapper, per esempio. Per AR con SQLite, questo funziona:

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

Altri suggerimenti

Se stai usando Sinatra, non posso consigliare DataMapper vivamente. Ho un paio di applicazioni Rails, dove mi sono bloccato con ActiveRecord, e sto costantemente maledicendo le sue carenze e difetti di progettazione. Se siete su Sinatra, DataMapper è una scelta molto pratica.

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

E 'a voi come comunicare con un database, è possibile scegliere uno dei due ORM o qualche adattatore NoSQL. Ci sono molte opzioni disponibili, alcune delle quali sono state fatte apposta per Sinatra:

Per esempio, non v'è Sinatra ActiveRecord Extension
Originariamente creato da Blake Mizerany, creatore di Sinatra
Si estende Sinatra con metodi di supporto ActiveRecord e compiti Rake

Un'altra opzione è Sinatra Sequel di estensione .
Questa piccola estensione aggiunge configurazione del database, le migrazioni, e gli adattatori Sequel a destra in Sinatra.

O Sinatra-Redis, o Sinatra-Mongo, e così via. Basta cercare quello che vuoi.

Ma si può anche utilizzare liberamente qualsiasi libreria indipendente, controlla la Sinatra Ricette sui database , in cui è elencato un paio di esempi di come utilizzare mapper di database popolari con Sinatra. Anche se si è detto lì che la pratica suggerita per questo sta usando DataMapper, ho il sospetto che questo è un semplice preferenza, perché nulla in Sinatra stesso suggerisce questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top