【发布时间】:2014-08-19 23:06:01
【问题描述】:
我正在尝试弄清楚如何只验证一次模型。
情况如下:
这是关于图书馆管理
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 日期
我的代码在这里,每次我保存(更新)验证运行的记录...
【问题讨论】:
-
这听起来像是过早的优化。您应该开始动态计算图书属性。众所周知,计数器很难正确。考虑重新设置、清除和设置日期。无论您想出什么方案都应该跟踪它,并且计数器更新应该看起来是原子的,这需要显式锁定。
-
是的...一位朋友告诉我在没有计数器列的情况下再次重组我的架构。我会尽力。还是谢谢你