当我尝试播种数据库时,我开始收到此错误:
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
方法了?这里到底发生了什么?我不太确定。
答案 0 :(得分:2)
您是否介意将费用设为0.0而不是0?
self.cost = 0.0 if self.cost.blank?
这应该可以解决你的问题。