rails在验证之前将记录保存到表中?

时间:2016-06-22 04:08:08

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

所以我基本上有一张发票,而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设置为关闭,所以下次我想编辑时,我不能再编辑了,因为它已经关闭了。

3 个答案:

答案 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模型。