假设我有一些验证,我只想在我的记录处于特定状态时运行。这允许保存不完整的草稿记录,并且可以稍后填写其余内容。
validates_presence_of :intro, :codename, :body,
if: lambda { |o| o.content_state == :review }
现在我想知道这条记录的内容是否可以认为是完整的,这将允许它移动到review
状态。验证为将约束和要求应用于模型属性提供了一个极好的框架,我想利用它。
所以我得拿一个草稿的内容记录,然后把它当成review
状态来验证,如果出现任何错误,说明内容还不完整。
但我设法做到这一点的唯一方法如下:
def content_completable?
old_content_state = content_state
self.content_state = 'review'
return valid?
ensure
self.content_state = old_content_state
end
这对我来说感觉很笨拙。它似乎有效,但是我正在使用实际的状态机为这些状态提供动力,其中的文档说手动分配状态名称不是一件好事。但我必须这样做,因为可能没有过渡回来。
我现在实际上不想更改模型,即使它是有效的。我只想知道如果模型处于不同的状态,它是否有效?
我希望 ActiveRecords#valid?
方法能够接受一个哈希属性,该属性会覆盖模型上的当前值,但它似乎不能以这种方式工作。
有没有更好的方法来做我正在做的事情?