如何在数据库中获取BigDecimal值并使其在视图中具有人类可读性

时间:2015-12-16 16:46:22

标签: ruby ruby-on-rails-4 bigdecimal

我想显示产品的价格,并且读取使用Decimal比Integer或使用Floats更可靠。

我想知道如何在数据库存储为<BigDecimal:646c8b8,'0.2E2',9(18)时从数据库中提取实际数字17.99。我需要在表单中显示此值。

到目前为止,我有:

f.input :image_prices, as: :check_boxes

我将在视图中输出:

#<IMAGEPRICE:0X007F0431BB0850>
#<IMAGEPRICE:0X007F0431BB0710>
#<IMAGEPRICE:0X007F0431BB05D0>
#<IMAGEPRICE:0X007F0431BB0490>

但是保存正确的ID时会存储。模型关系如下:

class Image < ActiveRecord::Base
  has_many :image_options, dependent: :destroy
  has_many :image_prices, through: :image_options
end

class ImageOption < ActiveRecord::Base
  belongs_to :image_price
  belongs_to :image
end

class ImagePrice < ActiveRecord::Base
  has_many :image_options
  has_many :images, through: :image_options
end

我此刻陷入困境,现在已经尝试了3个小时无济于事。

1 个答案:

答案 0 :(得分:4)

如果唯一的问题是图片价格在复选框列表中显示为#<IMAGEPRICE:0X007F0431BB0850>,只需在to_s模型中定义ImagePrice方法,并让它返回字符串表示形式价钱。例如,如果该价格的十进制值存储在price属性中,则您的方法看起来像

class ImagePrice < ActiveRecord::Base
  # ...
  def to_s
    price.to_s
  end
end