Rails 3:过滤后模型导致无限循环
Posted
技术标签:
【中文标题】Rails 3:过滤后模型导致无限循环【英文标题】:Rails 3: Model After Filter causing infinite loop 【发布时间】:2012-10-17 16:07:03 【问题描述】:我有以下后过滤器:
用户模型:
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
方法并由于某种原因导致了无限循环。不知道如何阻止这种情况...有什么想法吗?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于Rails 3:过滤后模型导致无限循环的主要内容,如果未能解决你的问题,请参考以下文章