在db中记录没有被创建,但代码表现得好像?

时间:2014-07-24 01:44:39

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

我正在测试我的代码。如果某些字段留空(即pickupdate& returndate),则不应创建记录。这在模型中非常清楚地说明了:

  validate :custom_validation

  def custom_validation
    errors[:base] << "Please enter both a pick up date and a return date" if self.pickupdate.blank? || self.returndate.blank?
    if self.pickupdate.present? && self.returndate.present?
      errors[:base] << "Please enter a pick up date and a return date on or after today" if (self.pickupdate.to_date < Date.today) || (self.returndate.to_date < Date.today)
      errors[:base] << "Please enter a return date that is on or after the pick up date" if self.pickupdate > self.returndate
      errors[:base] << "Please submit requests with a maximum 2-week duration, we don't have enough lenders at this time to offer long term borrows" if (self.returndate.to_date - self.pickupdate.to_date).to_i > 14
    end
  end

此外,正在测试的模型规格已经过去了!

但是,我刚刚编写了一个卡住的集成测试,当我在控制台中进行故障排除时,我尝试使用空白pickupdate创建一个空白{{{ 1}}。然后我在控制台中做returndate并猜猜是什么??

inspect

通过上面的控制台输出显示记录确实已提交给db。现在这是另一个泡菜。当我进入 (0.1ms) begin transaction (0.1ms) commit transaction INSPECT #<Request id: nil, name: nil, email: nil, items: nil, detail: "i should not be created\r\n", created_at: nil, updated_at: nil, edit_id: nil, heard: nil, pickupdate: nil, returndate: nil, signup_id: 2> END 并查看rails c时,我会发现昨天的Request.last,而不是今天。

我只是想知道这是怎么发生的......因为即使检查有问题而且记录没有提交给db(我的意思是......它甚至没有自己的id ),最重要的是我的测试失败了,因为它继续,好像记录被保存了一样。因此,在某些方面,我在该记录上得到了一个nomethoderror错误。

供参考,控制器代码:

Request

基本上,即使@requestrecord = @signup_parent.requests.build #separate from create, because I need to check on some stuff before saving if @requestrecord = @signup_parent.requests.create(@requestparams) ... 完全为空,create动作也会以某种方式返回true。现在我可以通过编写显式检查@requestparams的包装if语句来解决此问题,因为上面的控制台日志输出中不存在该语句。但是现在我的好奇心被激发了,我试图了解造成这个问题的原因。它是单独的@requestrecord.id声明吗?我想到了......但那么......一旦我真的打电话给build那就没关系了吗?

0 个答案:

没有答案