如何在Rails控制台中的活动记录查询中将“ to_f”应用于所有结果的列

时间:2019-05-29 03:36:52

标签: ruby-on-rails activerecord

我有这个查询: p = Payment.where(:client_id => 1)

然后只有一些字段,因此我执行此命令: p.select(:id, :created_at, :amount)

问题在于结果中的每个金额都以BigDecimal的形式出现,并且不可读。我需要在Rails控制台中应用to_f函数,以获取一组可读的结果。

我尝试了map,如下所示: p.map {|p| p.amount.to_f} 但是它只返回给我一个带有数量的数组,我需要它与其他属性一起出现。

3 个答案:

答案 0 :(得分:1)

为解决您的问题并获取所有字段:

p.map { |i| [i.id, i.created_at, i.amount.to_f] }

您还可以查看此article。也许您只需要数据库中amount字段的浮点类型

答案 1 :(得分:1)

您可以尝试这样

p.map { |item| { id: item.id, created_at: item.created_at, amount: item.amount.to_f}}

答案 2 :(得分:0)

如果您始终想要float的金额,则可以设置回调after_find

class Payment < ActiveRecord::Base
  after_find do |payment|
    self.amount = self.amount.to_f
  end
end

当找到对象时,它将始终为您提供浮点值

  • 它不会更新您数据库中的值。

请查看此Rails Callback