我有一个自引用循环,它引用最近的关联记录以查看它是否被赶上。但是,它一直引用第一个关联记录,因此它一直处于无限循环中。我认为这是因为 ActiveRecord 事务在整个循环中一直运行,所以它永远不会停止并更新自己。
有什么方法可以强制模型在继续之前自行重置?
这是我的模型(并不是说异常引发只是为了验证我们是否真的进入了下一个记录)。
class RecurringRule < ActiveRecord::Base
belongs_to :organization
has_one :last_run, :class_name => "Transaction", :order => 'id DESC'
has_many :transactions
attr_accessible :period, :last_run_id
after_create :destroy_if_period_empty
def destroy_if_period_empty
if !period?
self.destroy
end
end
def recur
@count = @count || 0
if @count > 0 then raise last_run.id.to_s end
if last_run.created_at.to_date.advance(period.pluralize.to_sym => 1) >= Date.today
new = Transaction.new({
amount: last_run.amount,
person_id: last_run.person_id,
organization_id: last_run.organization_id,
recurring_rule_id: last_run.recurring_rule_id
})
new.save!
@count += 1
self.recur
end
return @count
end
end