rails 在验证之前将记录保存到 table?
rails save record to table before validating?
所以我基本上有一张发票,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 设置为关闭,这样下次我想编辑时,我就不能再编辑了,因为它已经关闭了。
我认为这对你有用。它使用 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
您可以使用更新前的值 post_status_was
来验证 Invoice
模型。
这都是因为验证正在调用您的更新操作。所以你最好在没有任何验证调用的情况下设置 status = 'Closed'
。
为此你可以使用 update_column(name, value)
。 update_column 没有触发任何回调,你就完成了。
当您在控制器中将列更新为 closed
时,请像下面那样使用,您就完成了。
@object_to_close.update_column('status', 'Closed')
所以我基本上有一张发票,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 设置为关闭,这样下次我想编辑时,我就不能再编辑了,因为它已经关闭了。
我认为这对你有用。它使用 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
您可以使用更新前的值 post_status_was
来验证 Invoice
模型。
这都是因为验证正在调用您的更新操作。所以你最好在没有任何验证调用的情况下设置 status = 'Closed'
。
为此你可以使用 update_column(name, value)
。 update_column 没有触发任何回调,你就完成了。
当您在控制器中将列更新为 closed
时,请像下面那样使用,您就完成了。
@object_to_close.update_column('status', 'Closed')