rails validates_uniqueness_of不能正常工作

时间:2014-05-18 16:35:08

标签: ruby-on-rails validation

我有一个像这样的帐户模型

class Account < ActiveRecord::Base
end

我在制作中有一些重复记录,所以我已经添加了这一行

validates_uniqueness_of :owner_id, :on => :create

所以它只会在新记录上验证这一点,而save!上的

它适用于localhost甚至是生产环境中的控制台。 但是我有一个每10分钟运行一次的工作,它使用rails runner并且

失败了
Validation failed: Owner has already been taken (ActiveRecord::RecordInvalid)

跑步者对帐户执行某些操作,然后保存。

我在这种语法上做错了吗?

2 个答案:

答案 0 :(得分:0)

只有当我看到这种情况发生时,控制器“创建”操作才会被发送为:get请求(而不是:应该在REST中发布)。结果是验证没有意识到它正在做:创建。听起来不像你在这里...但也许类似? 仅供参考我当时的修正是使用if: :new_record?而不是on: :create,直到可以修复请求类型。你可以试试这个。

此外,您可以将调试语句放入验证中,以便在验证过程中询问对象的状态,例如if: -> { binding.pry }if: -> { debugger }(当然,取决于您用来调试的内容)。希望这将有助于弄清楚跑步者的不同之处。您可以询问该对象是new_record?还是changes必须保存的内容等。

答案 1 :(得分:0)

我发现这种方法没有 :on =&gt; :创建 除非 所以我这样做了:

validates_uniqueness_of :owner_id, :if =>  Proc.new { |account| account.created_at > Time.now - 10.seconds }