Какой лучший способ поговорить с базой данных при использовании Sinatra?

Как я понимаю, структура Sinatra, в отличие от Rails, не предоставляет ORM. В таком случае, как вы разговариваете с БД в приложении Sinatra? Или Sinatra только для приложений, которые не используют БД?

Ответ 1

Если вам нравится ActiveRecord, используйте это. Или что-то другое. Например, Datamapper. Для AR с SQLite это работает:

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

Если вы используете Sinatra, я не могу рекомендовать DataMapper достаточно высоко. У меня есть несколько приложений Rails, в которых я застрял в ActiveRecord, и я постоянно проклинаю его недостатки и недостатки дизайна. Если вы находитесь на Синатре, 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

Ответ 3

Вам решать, как общаться с базой данных, вы можете выбрать либо один из ORM, либо какой-либо NoSQL-адаптер. Есть много вариантов, некоторые из них были сделаны специально для Sinatra:

Например, есть Расширение ActiveRecord для Sinatra
Первоначально созданный Блейком Мизерьяном, создателем Синатра
Он расширяет Sinatra с помощью вспомогательных методов ActiveRecord и задач Rake

Другой вариант - Расширение Seinel Sinatra.
Это небольшое расширение добавляет настройки базы данных, миграции и адаптеры Sequel прямо в Sinatra.

Или синатра-редис, или синатра-монго, и так далее. Просто найдите то, что хотите.

Но вы можете свободно использовать любую независимую библиотеку, посмотрите Рецепты Sinatra в базах данных, где перечислены несколько примеров того, как использовать популярные базы данных с Sinatra. Хотя здесь упоминается, что предлагаемая практика для этого заключается в использовании DataMapper, я подозреваю, что это просто предпочтение, потому что ничто в Sinatra не предполагает этого.