Я конвертирую приложение Rails в Sinatra. Приложение полагалось на ActiveRecord, который поддерживает виртуальные атрибуты, однако я изо всех сил пытаюсь найти аналогичную поддержку в DataMapper.
В Rails я использовал алгоритм для создания оценок и сортировки записей на основе оценки. В основе этого процесса лежали виртуальные атрибуты. Кто-нибудь знает, как воспроизвести эту функциональность в Sinatra/DM?
Я открыт для любых обходных путей. Рефакторинг может быть позже, так как на данный момент меня интересует только функциональность.
Теоретически решение будет работать примерно так:
require 'sinatra'
require 'data_mapper'
require 'haml'
DataMapper::setup(:default,"sqlite3://#{Dir.pwd}/example.db")
class Link
include DataMapper::Resource
property :id, Serial
property :title, Text
property :url, String
property :points, Integer, :default => 0
property :created_at, Time
attr_accessor :score
def calculate_score
time_elapsed = (Time.now - self.created_at) / 3600
self.score = (self.points-1) / (time_elapsed+2)**1.8
end
end
DataMapper.finalize.auto_upgrade!
get '/hot' do
@links = Link.all :order => :score.desc
haml :index
end