Ruby on Rails查询返回额外的列

时间:2014-08-21 02:15:54

标签: ruby-on-rails activerecord

我在Oracle 11g数据库上使用Ruby 2.0.0和Rails 4.0.9。

我查询数据库以获取一对值[date,score]来绘制图表。 不幸的是,我的查询返回三元组,例如[日期,分数,某些东西],并且图表失败。

以下是查询:

@business_process_history = DmMeasure.where("period_id between ? and ? and ODQ_object_id = ?", 
first_period_id, current_period_id, "BP-#{@business_process.id}").
select("period_day, score").order("period_id")

以下是控制台中的结果:

DmMeasure Load (1.2ms)  SELECT period_day, score FROM "DM_MEASURES" WHERE (period_id between 1684 and 1694 and ODQ_object_id = 'BP-147') ORDER BY period_id
=> #<ActiveRecord::Relation [#<DmMeasure period_day: "20140811", score: #<BigDecimal:54fabf0,'0.997E2',18(45)>>, 
#<DmMeasure period_day: "20140812", score: #<BigDecimal:54fa7e0,'0.997E2',18(45)>>, ...]

尝试格式化结果也会返回三元组:

@business_process_history.map { |bp| [bp.period_day, bp.score] }
=> [["20140811", #<BigDecimal:54fabf0,'0.997E2',18(45)>], 
["20140812", #<BigDecimal:54fa7e0,'0.997E2',18(45)>], ...]

这是从哪里来的? 我该如何避免这种行为?

感谢您的帮助,

致以最诚挚的问候,

佛瑞德

1 个答案:

答案 0 :(得分:0)

什么三胞胎?从我所看到的,每个项目有两个属性:'period_day'(表示日期的字符串)和'score'(单个数字的BigDecimal表示)。

ruby BigDecimal只是表示数字的一种方式。

例如,如果你在rails控制台中玩它们:

> BigDecimal.new(1234)
=> #<BigDecimal:f40c6d0,'0.1234E4',9(36)>

第一部分,如您所见,有点像科学记数法,它包含有效数字和精确度。

要弄明白18(45)是什么,我必须深入研究original c-code for the BigDecimal#inspect method。 这是对该方法的评论:

/* Returns debugging information about the value as a string of comma-separated
 * values in angle brackets with a leading #:
 *
 * BigDecimal.new("1234.5678").inspect ->
 * "#<BigDecimal:b7ea1130,'0.12345678E4',8(12)>"
 *
 * The first part is the address, the second is the value as a string, and
 * the final part ss(mm) is the current number of significant digits and the
 * maximum number of significant digits, respectively.
 */

答案是:当前有效位数和最大有效位数