Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 验证不需要';t工作(轨道3)_Ruby On Rails_Ruby_Ruby On Rails 3_Validation_Model - Fatal编程技术网

Ruby on rails 验证不需要';t工作(轨道3)

Ruby on rails 验证不需要';t工作(轨道3),ruby-on-rails,ruby,ruby-on-rails-3,validation,model,Ruby On Rails,Ruby,Ruby On Rails 3,Validation,Model,在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).l

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”
I have Item.save in rotate方法)时,验证停止工作

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 

任何提示或建议都将不胜感激。

我曾经遇到过类似的问题,我想通过向表中添加索引实际上可以解决这个问题。在Items中的created_at列中添加索引

您已经对rails中的索引进行了完整的解释


希望有帮助

多亏了@FabKremer,我才得以解决:)

通过在
项之前添加
@i.created\u at=Time.now.change(usec:0)
。保存
:)


尽管如此,我还是接受了他的答案,因为这在大多数情况下都适用。

所以你的主要任务是你不想拥有两个具有相同创建时间的项目,但实际上你拥有它们,对吗?是的,我不想拥有两个具有相同日期的项目。但是,现在几乎是同一时间:)只有usec不同。非常感谢你,伙计。我刚刚在本地机器上测试了它&看起来它成功了。请让我在24小时后在服务器上确认,在cron完成他的工作后&我将能够检查它。因为,我一直认为它不会起作用,因为usec是不同的:)再次,谢谢你,我明天会检查它&我希望它能起作用&我会接受你的回答。没问题,老兄!如果您在服务器端遇到任何其他问题,请询问!但是我们希望你没有:)嗨,伙计:)有相同的东西:)只有usec是不同的:))但是,非常感谢:)现在我知道我为什么有这些东西:)谢谢你,伙计:)你的东西+@I.created_at=Time.now.change(usec:0)解决它:)再次,非常感谢:)有一个很棒的生活:)