【问题标题】:How to update a BigDecimal attribute in Rails model?如何更新 Rails 模型中的 BigDecimal 属性?
【发布时间】:2016-06-20 16:40:04
【问题描述】:

我有以下模型 JobRequest::Receipt。

如您所见, :amount 属性是一个大数字。

# Table name: job_request_line_headers
#
#  id                     :integer          not null, primary key
#  type                   :string(255)
#  job_request_id         :integer
#  merchant_company_id    :integer
#  merchant_id            :integer
#  default_setting        :boolean          default(FALSE)
#  payment_amount         :decimal(12, 4)
#  payment_state          :integer          default(0)
#  payment_at             :datetime
#  deleted_at             :datetime
#  published_at           :datetime
#  delivered_at           :datetime
#  created_at             :datetime
#  updated_at             :datetime
#  related_line_header_id :integer
#  amount                 :decimal(12, 4)

这就是对象的样子

> JobRequest::Receipt id: 24, type: "JobRequest::Receipt",
> job_request_id: 19, merchant_company_id: nil, merchant_id: nil,
> default_setting: false, payment_amount: nil, payment_state: 1,
> payment_at: nil, deleted_at: nil, published_at: nil, delivered_at:
> nil, created_at: "2016-03-07 06:58:49", updated_at: "2016-03-07
> 06:58:49", related_line_header_id: nil, amount:
> #<BigDecimal:7ffe424c7d48,'0.0',9(18)

如果我尝试以以下任何方式更新金额属性,它将提交 SQL,但不会更新值

pry(main)> JobRequest::Receipt.last.update_attribute(:amount, 22.3)

pry(main)> JobRequest::Receipt.last.update_attribute(:amount, BigDecimal.new(22.3, 5)

amount = BigDecimal.new(22.3, 5)

pry(main)> JobRequest::Receipt.last.update_attribute(:amount, amount)

其中任何一个都将返回设置为零的金额。

> [86] pry(main)> JobRequest::Receipt.last.amount   
JobRequest::Receipt
> Load (1.7ms)  SELECT  "job_request_line_headers".* FROM
> "job_request_line_headers"  WHERE
> "job_request_line_headers"."deleted_at" IS NULL AND
> "job_request_line_headers"."type" IN ('JobRequest::Receipt') AND
> "job_request_line_headers"."default_setting" = 'f'  ORDER BY
> "job_request_line_headers"."id" DESC LIMIT 1
> => #<BigDecimal:7ffe3be9bc40,'0.0',9(18)>

任何线索我做错了什么?

【问题讨论】:

    标签: ruby-on-rails activerecord bigdecimal


    【解决方案1】:

    我刚刚在 `herouku run rails console´ 上通过以下方式在 Bigdecimal 字段上进行了操作:

    $ i = Item.find(47)
    $ i.selling_price = 25.00
    $ i.save!
    $ i.selling_price
    

    OUTPUT: BigDecimal:7f3cdfe1d598,'0.25E2',9(18)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多