找出是否在模型回调中

时间:2016-01-13 01:32:17

标签: ruby-on-rails rails-activerecord

有时我想要一个可以独立使用的方法,并且在Rails回调中使用的方法有点不同。我想在我的方法中调用save(),如果它在回调范围内则被忽略。

所以Rails中有一个方法可以说我目前是否处于ActiveModel回调的上下文中。最后的手段是使用回溯,但我希望有一个更好的解决方案。

更新

我的模型有某种状态机。一个事件转换是make_bid。在before_create期间,我想调用它并创建出价。如果创建成功,则make_bid会将状态设置为bidded

现在,在此方法中save是有意义的,因为它是一种事件转换方法。但是,如果调用save,因为它位于before_create中,将发生堆栈溢出。

这个make_bid方法也是从其他不是模型回调的上下文中调用的,我们确实想要save

所以唯一的方法是找出我们是否在回调中,如果是,则不要保存,否则,保存。

1 个答案:

答案 0 :(得分:0)

您可以设置一个标志以避免无限递归:

def make_bid
  return if @making_bid
  @making_bid = true
  ...
  save
  @making_bid = false
end