未定义的方法`to_d'为0:Fixnum在尝试种子数据库时?

时间:2012-03-31 14:40:38

标签: ruby-on-rails ruby ruby-on-rails-3

当我尝试播种数据库时,我开始收到此错误:

rake aborted!
undefined method `to_d' for 0:Fixnum

这是在我添加此方法之后开始的,如果它们存在(2,000.00 <2000.00),则删除逗号的十进制列:

def cost=(num)
   num.gsub!(',','') if num.is_a?(String)
   self[:cost] = num.to_d
end

我对Product模型的每一列都有相同的方法:

create_table :products do |t|
  t.decimal :cost, :precision => 11, :scale => 2
  t.decimal :tax_rate, :precision => 8, :scale => 2
  t.decimal :shipping_cost, :precision => 8, :scale => 2
  t.decimal :cost_per_unit, :precision => 11, :scale => 2
  t.decimal :unit_amount, :precision => 16

现在查看跟踪(https://gist.github.com/2265580)我认为问题可能是我的default_to_zero_if_necessary方法:

Product.rb

before_validation :default_to_zero_if_necessary, :on => :create

private

  def default_to_zero_if_necessary
    self.tax_rate = 0 if self.tax_rate.blank?
    self.shipping_cost = 0 if self.shipping_cost.blank?
    self.cost = 0 if self.cost.blank?
    self.cost_per_unit = 0 if self.cost_per_unit.blank?
    self.unit_amount = 0 if self.unit_amount.blank?
  end

也许我不能再使用我的default_to_zero_if_necessary方法了?这里到底发生了什么?我不太确定。

1 个答案:

答案 0 :(得分:2)

您是否介意将费用设为0.0而不是0?

self.cost = 0.0 if self.cost.blank?

这应该可以解决你的问题。