假設一個模型會產生一個驗證錯誤,通常這是由控制器處理的,但是有可能由模型自動處理嗎?在Rails中,是否可以修復模型中的模型驗證錯誤?
實際上我想生成一個唯一的ID uid
每個Note
,模型看起來是這樣的:
class Note < ActiveRecord::Base
validates_uniqueness_of :uid
# ... some code to generate uid on after_initialize
end
我得到的最接近是:
class Note < ActiveRecord::Base
validates_uniqueness_of :uid
# ... some code to generate uid on after_initialize
after_rollback :repair
protected
def repair
if self.errors[:uid].size > 0
self.uid = generate_uid
end
self.save # Try again
end
end
一些眼前的問題與我的解決方案: (1)模型實例仍然存在控制器可以看到的錯誤,我不知道如何清除錯誤。 (2)修復方法是遞歸的。
我不會這樣。在過濾器或驗證之前/之後重新保存模型是解決問題的絕佳方法。 –
@ErezRabih是正確的,除了使用真正的uuid生成器,我想我會創建一個像''''save_with_repair'''這樣的附加方法,如果安全失敗並且具有唯一的約束,那麼它會重試。 – phoet