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