我有一个示例课程:
class Human < ActiveRecord::Base
has_and_belongs_to_many :diseases
before_save :check_health
def check_health
if(diseases.count == 0)
self.healthy = true
end
end
end
我想在保存之前更改对象的字段。
问题:
self.diseases
会返回diseases
关联的旧值。
可以通过:diseases
访问association_cache[:diseases]
的新值,但我不知道如何使用association_cache
。我不明白哪些对象被标记为删除,哪些对象是新的,哪些已更新。
答案 0 :(得分:1)
为什么不重新加载关系对象以获得准确的计数?试试这个:
def check_health
healthy = true unless diseases.reload.any?
end
答案 1 :(得分:0)
起初我认为#check_health
中的逻辑是完全正确的。无需改变它。
您遇到问题的原因可能是您在人类和疾病的非持久性物体上使用它。
要解决此问题,我认为正确的方法是将before_save
回调更改为after_save
回调。这将更有意义。此外,它看起来你只需要这个方法以便以后使用保存,所以为什么不这样做呢?