我正在将 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