ruby-on-rails - Rails 模型似乎有效但未验证

标签 ruby-on-rails database validation activerecord model

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

# 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,并且我的 gems 是最新的。我该如何解决这个问题?

最佳答案

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

# BEFORE:
def set_paid
    self.paid = false
end

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

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

关于ruby-on-rails - Rails 模型似乎有效但未验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290822/

相关文章:

ruby-on-rails - 使用 Rspec on Rails 6 测试 Controller 问题

ruby-on-rails - 如何强制 send_data 在浏览器中下载文件?

mysql - 对 2 列进行查询,就好像它们是一列一样

java - Struts 2 中的验证和主题

ruby-on-rails - rails 5 scope has_many 通过 distinct 和 where

java - 如何使用 spring 添加多个谷歌云数据源

sql - 大表 UNION 的性能问题

javascript - 输入字段上的两个函数调用,一个是 onBlur,一个不在 Angular 中

javascript - Recaptcha 弹出警告

javascript - 帮助通过 ror 通过 ajax 执行 javascript