1

我的模型看起来像这样,没什么特别的:

# Table name: invoices
#
#  id               :integer         not null, primary key
#  total            :float
#  discount         :float
#  description      :text
#  created_at       :datetime        not null
#  updated_at       :datetime        not null
#  company_id       :integer
#  secret           :string(255)
#  address_id       :integer
#  price_per_credit :float
#  paid             :boolean

我可以在服务器和 Rails 控制台中创建它的实例,如果我调用.valid?它们,这些实例将返回 true(出于测试目的,我关闭了所有验证)。

1.9.3p194 :001 > i = Invoice.new
 => #<Invoice id: nil, total: nil, discount: nil, description: nil, created_at: nil, updated_at: nil, company_id: nil, secret: nil, address_id: nil, price_per_credit: nil, paid: nil> 
1.9.3p194 :002 > i.valid?
 => true

但是,由于某种原因,我无法将这些实例保存到数据库中。

1.9.3p194 :003 > i.save
   (0.3ms)  begin transaction
   (0.1ms)  rollback transaction
 => false

在本地我使用 sqlite,生产服务器正在运行 MySQL,但两者都显示这种行为。我不确定该怎么做才能调试它。我确实跑db:migrate了,我的宝石是最新的。我该如何解决这个问题?

4

1 回答 1

8

原来我有一个before_create返回错误的过滤器,导致保存过程停止。为了解决这个问题,我添加nil到类中,如下所示:

# BEFORE:
def set_paid
    self.paid = false
end

# AFTER:
def set_paid
    self.paid = false
    nil
end

希望这对其他人也有帮助!

于 2012-07-02T09:38:29.987 回答