Rails验证回调只有一次

时间:2014-08-19 23:06:02

标签: ruby-on-rails validation

我正在试图弄清楚如何只验证一次模型。

情况如下:

关于图书馆管理

class Loan < ActiveRecord::Base
  attr_accessible :book_id, :check_in, :check_out, :member_id

  belongs_to :book
  belongs_to :member

  validates :member_id, :presence => true
  validates :book_id, :presence => true

  validate :returned_book, :on => :update


  def returned_book
    self.book.update_attributes! quantity: self.book.quantity + 1
    self.book.update_attributes! borrowed_count: self.book.borrowed_count - 1
  end

end

我想做的是,当我提出check_out日期(我正在归还一本书)时:

  • 增加图书的quantity
  • 减少书籍的borrowed_count

但只有一次,不是每次我更新记录或更改check_out日期

我的代码在这里,每次我保存(更新)验证运行的记录......

1 个答案:

答案 0 :(得分:1)

验证应该用于验证事物,而不是修改状态。在这种情况下,回调会更合适。也许是这样的:

attr_accessor :quantities_adjusted

before_save :update_quantities

def update_quantities
  if changed_attributes.keys.include?('check_out') && !quantities_adjusted
    self.book.quantity += 1
    self.book.borrowed_count -= 1
    self.quantities_adjusted = true
  end
end