在Ruby on Rails中存储复杂公式

时间:2012-04-09 06:08:16

标签: ruby-on-rails

我正在构建一个需要计算各公司销售佣金的RoR应用程序。在新公司开始使用该应用程序后,将会有新的佣金模型。这些佣金通常表示为复杂的MS Excel公式,但并非总是如此。我需要将这些重新实现为Ruby。

例如,佣金模式可能是以下行加在一起

column_1 * ( column_2 / column_3)
if ( column_6 > column_1 ) column_5 * column_4
if ( column_2 < column_1 ) column_2

鉴于上线后会有新的佣金模式,将这些存储在数据库中的最佳方法是什么? (这部分不需要过于用户友好,只有开发人员才会添加新模型)

显然,可以使用eval从数据库中读取上述内容来完成。除了安全问题,它不像是一个“干净”的解决方案。

我还能怎样解决这个问题?

我一直在研究DSL,使用Excel文件作为黑盒子计算器,公式宝石,我很难找到一个很好的方法来做到这一点。

TIA

1 个答案:

答案 0 :(得分:0)

Re:使用excel文件作为黑盒计算器,我使用axlsx在Ruby中生成excel文件,我觉得这样的东西可能适合你:

require 'axlsx'
Axlsx::Package.new do |p|
  p.workbook do |wb|  
    wb.add_worksheet do |sheet|
      sheet.add_row [column_1,column_2,column_3]
      sheet.add_row ["=A1*(B1/C1)"]
    end
  end
  p.serialize('results.xlsx')
end

但是,由于公式实际上是由excel执行的,因此只能在Excel输出中以这种方式访问​​代码。

我知道这是一个月份的问题,所以我很好奇你的用途,如果有的话。