0

我有一个自引用循环,它引用最近的关联记录以查看它是否被赶上。但是,它一直引用第一个关联记录,因此它一直处于无限循环中。我认为这是因为 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
4

1 回答 1

1

你可以试试

Model.association(force_reload=true)

请参阅此处以供参考(它也适用于有很多关系)

于 2012-10-11T07:44:29.953 回答