最新の関連付けられたレコードを参照して、追いついたかどうかを確認する自己参照ループがあります。ただし、最初に関連付けられたレコードを参照し続けるため、無限ループに陥り続けます。これは、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