我有一个像这样的帐户模型
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)
跑步者对帐户执行某些操作,然后保存。
我在这种语法上做错了吗?答案 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 }