【问题标题】:Virtual Attributes with Sinatra and Datamapper使用 Sinatra 和 Datamapper 的虚拟属性
【发布时间】:2012-06-10 20:25:49
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby sinatra datamapper virtual-attribute


    【解决方案1】:

    我没有使用过数据映射器,但我认为这段代码会给你所需的功能:更改包括,Link all_sorted_desc 上的新类方法并在“获取”请求中调用它

    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
    
      def self.all_sorted_desc
        self.all.each { |item| item.calculate_score }.sort { |a,b| a.score <=> b.score }.reverse 
      end
    end
    
    DataMapper.finalize.auto_upgrade!
    
    get '/hot' do
        @links = Link.all_sorted_desc 
        haml :index 
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多