Каков наилучший способ взаимодействия с базой данных при использовании Sinatra?
Вопрос
Насколько я понимаю, фреймворк Sinatra, в отличие от Rails, не предоставляет ORM.В таком случае, как вы общаетесь с базой данных в приложении Sinatra?Или Sinatra предназначена только для приложений, которые не используют базу данных?
Решение
Если вам нравится 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
Другие советы
Если вы используете Sinatra, я не могу рекомендовать Преобразователь данных достаточно высоко.У меня есть пара приложений 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
Как взаимодействовать с базой данных, зависит от вас, вы можете выбрать либо один из ORM, либо какой-либо адаптер NoSQL.Доступно множество вариантов, некоторые из них были сделаны специально для Sinatra:
Например, существует Расширение Sinatra ActiveRecord
Первоначально создан Блейком Мизерани, создателем Sinatra
Он расширяет Sinatra вспомогательными методами ActiveRecord и задачами Rake
Другим вариантом является Продолжение Сиквела Синатры.
Это небольшое расширение добавляет конфигурацию базы данных, миграции и адаптеры продолжения прямо в Sinatra.
Или синатра-редис, или синатра-монго, и так далее.Просто ищите то, что вам нужно.
Но вы также можете свободно пользоваться любой независимой библиотекой, ознакомьтесь с Рецепты Синатры в базах данных, где приведена пара примеров того, как использовать популярные картографы баз данных с Sinatra.Хотя там упоминается, что рекомендуемой практикой для этого является использование DataMapper, я подозреваю, что это простое предпочтение, потому что ничто в самой Sinatra не предполагает этого.