0
我在before_save
一些逻辑由此(仅)当某些条件被满足我让新行special_number
等于在数据库+ 1的最大special_number被创建(如果条件不符合,我做一些不同的事情,所以我不能使用自动增量)ActiveRecord的和before_save`和`save`之间`transactionsin
我担心的是,一次在这个数据库上运行的两个线程可能会选择相同的special_number
如果第二个执行时首先是保存。有没有办法锁定before_save
之间的数据库和完成保存,但只在某些情况下?我知道所有的保存都是以交易方式发送的,这会帮助我完成这项工作吗?
def before_save
if things_are_just_right
# -- Issue some kind of lock?
# -- self.lock? I have no idea
# Pick new special_number
new_special = self.class.maximum('special_number') + 1
write_attribute('special_number',new_special)
else
# No need to lock in this case
write_attribute('special_number',some_other_number)
end
end
我没有实际使用MySQL! (heroku + sqlite3) - 我不认为sqlite具有相同的功能? – 2010-04-16 10:18:02