我已经解决了我的问题,但我有 0 个想法为什么会发生这种情况,这是一个奇怪的错误吗?
我在成员资格模型中有一个创建前操作。
成员资格可以belong_to组织。 组织has_many成员资格。
before_create :check_payment_plan
然后我在check_payment_plan方法中有一些逻辑。 它做什么无关紧要。 因为我发现了以下行为:
当该方法如下所示时:
def check_payment_plan
puts self.organization.memberships.length
end
**The membership is not created.**
当该方法如下所示时:
def check_payment_plan
puts self.organization.memberships.all.length
end
**The membership is created.**
因此,如果有人在before_filter中没有创建模型的实例,请检查是否遵循上述模式,则使用 .all.length,以供将来参考。
谁能解释为什么会发生这种情况?!
您实际上可以将其简化为self.organization.memberships.count
,这可以让计数在数据库级别进行,这可能会解决您遇到的问题。
最好的猜测是,模型只是代表单个实例,而不是所有实例。这就是为什么您必须先调用 .all。