有时我想要一个可以独立使用的方法,并且在Rails回调中使用的方法有点不同。我想在我的方法中调用save()
,如果它在回调范围内则被忽略。
所以Rails中有一个方法可以说我目前是否处于ActiveModel回调的上下文中。最后的手段是使用回溯,但我希望有一个更好的解决方案。
我的模型有某种状态机。一个事件转换是make_bid
。在before_create
期间,我想调用它并创建出价。如果创建成功,则make_bid
会将状态设置为bidded
。
现在,在此方法中save
是有意义的,因为它是一种事件转换方法。但是,如果调用save
,因为它位于before_create
中,将发生堆栈溢出。
这个make_bid
方法也是从其他不是模型回调的上下文中调用的,我们确实想要save
。
所以唯一的方法是找出我们是否在回调中,如果是,则不要保存,否则,保存。
答案 0 :(得分:0)
您可以设置一个标志以避免无限递归:
def make_bid
return if @making_bid
@making_bid = true
...
save
@making_bid = false
end