我正在试图弄清楚如何只验证一次模型。
情况如下:
关于图书馆管理
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
日期
我的代码在这里,每次我保存(更新)验证运行的记录......
答案 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