【发布时间】:2014-05-19 03:12:56
【问题描述】:
在model/item.rb我有自定义验证方法
validate :double_dates
after_save :double_check
private
def double_dates
if Item.where(:user_id => self.user_id, :asin => self.asin, :domain => self.domain).where("DATE(created_at) = ?", Date.today).length >= 1
errors.add(:created_at, "no double dates")
end
验证方法在“rails c”中确实有效。但是,当我同时运行两个任务时(rails runner "ApplicationController.rotate" 我在旋转方法中有 Item.save) - 验证停止工作。
irb(main):044:0> i1.created_at
=> Thu, 24 Apr 2014 02:41:15 UTC +00:00
irb(main):045:0> i2.created_at
=> Thu, 24 Apr 2014 02:41:15 UTC +00:00
irb(main):046:0> i1.created_at == i2.created_at
=> false
irb(main):047:0> i1.created_at.to_time.to_i == i2.created_at.to_time.to_i
=> true
irb(main):048:0> i1.created_at.class
=> ActiveSupport::TimeWithZone
irb(main):049:0> i2.created_at.class
=> ActiveSupport::TimeWithZone
irb(main):050:0> i1.created_at.usec => 311714
irb(main):051:0> i2.created_at.usec => 312779
任何提示或建议将不胜感激。
【问题讨论】:
-
所以你的主要交易是你不想拥有两个具有相同创建时间的项目,但你实际上拥有它们,对吧?
-
是的,我不希望两个项目的日期相同。但是,现在几乎是同一时间 :) 只有 usec 不同。
标签: ruby-on-rails ruby ruby-on-rails-3 validation model