0

我有以下过滤后:

用户模型:

  def check_for_custom_district
    unless self.custom_district.blank?
      district = District.new(:name => custom_district, :state_id => state_id, :school_type_id => school_type_id)

      if district.save(false)
        school = School.new(:name => custom_school, :state_id => state_id, :country_id => 1, :source => "User")
        if school.save(false)
          district.schools << school
          update_attribute(:school_id, school.id)
        end
      end
    end
  end

  def check_for_custom_school
    if self.custom_district.blank? and self.custom_school.present?
      school = School.new(:name => custom_school, :state_id => state_id, :country_id => 1, :source => "User", :school_district_id => district_id)
      school.save(false)
      update_attribute(:school_id, school.id)
    end
  end

我进行了一些调试以将结果输出到控制台,并且代码正在访问该check_for_custom_district方法并由于某种原因导致无限循环。不知道如何阻止这种情况......有什么想法吗?

4

1 回答 1

1

我假设它是一个after_save过滤器。

因此,假设您刚刚保存了model.

它触发after_save过滤器。但是,在您的过滤器中,您实际上调用update_attribute(:school_id, school.id)了 ,这也会保存当前模型,这会after_save再次触发您的过滤器。

这就是你的无限循环的来源。

解决此问题的一种方法可能是根本不使用after_save过滤器。例如,只需重新实现该save方法:

def save(*)
  # your custom logic goes here
  super
end
于 2012-10-17T17:18:55.973 回答