ruby-on-rails - 使用 Sinatra 和 Datamapper 的虚拟属性

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

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

最佳答案

我没有使用过 datamapper,但我认为这段代码将为您提供所需的功能:更改包括链接 all_sorted_desc 上的新类方法并在“get”请求中调用该方法

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

关于ruby-on-rails - 使用 Sinatra 和 Datamapper 的虚拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972097/

相关文章:

html - 如何防止 link_to 图标在悬停时改变颜色?

Ruby Greed Koan - 如何改进我的 if/then 汤?

ruby - Sinatra 单元测试 - 使用 JSON 正文发布

测试使用 session 的 Sinatra 应用程序

ruby - Sinatra 模块化应用程序不工作

ruby-on-rails - 在我的应用程序上使用 Devise 注销时出现问题

ruby-on-rails - postgres 9.4,pgcrypto 0.4.1,rails 4.2.0,ruby 2.2.0,引用预期的字符串,得到 Arel::Nodes::BindParam

ruby - `<main>' : uninitialized constant Rabbit (NameError)

mysql - 在 ActiveRecord 迁移中添加外键时出错

ruby-on-rails - 默认情况下,是否有任何 HTTP 日志文件保存在我的系统上?