所以我基本上有一张发票,而post_status是零,当它设置为关闭时,用户不能再编辑它了。
validate :post_status, :if => :opened?
def opened?
if (post_status == 'Closed')
errors.add(:base, "Already Closed")
return false
end
return true
end
这就是我所拥有的,但是当我设置为关闭时,它已经开始验证它,因此我无法将其设置为关闭。我希望它能够将我的post_status设置为关闭,所以下次我想编辑时,我不能再编辑了,因为它已经关闭了。
答案 0 :(得分:0)
我认为这对你有用。它使用validate
,可让您根据方法进行验证。
validate :opened_post_status
def opened_post_status
saved_post_status = self.class.find(id).post_status
if (saved_post_status == 'Closed')
errors.add(:base, "Already Closed")
false
else
true
end
end
答案 1 :(得分:0)
这都是因为验证正在调用您的更新操作。因此,在没有任何验证调用的情况下设置status = 'Closed'
会更好。
为此,您可以使用update_column(name, value)
。 update_column不会触发任何回调,你就完成了。
当您将控制台中的列更新为closed
时,请使用如下所示。
@object_to_close.update_column('status', 'Closed')
答案 2 :(得分:-1)
您可以使用post_status_was
(更新前的值)来验证Invoice
模型。