Ruby on rails Rails 4:跳过回调

Ruby on rails Rails 4:跳过回调,ruby-on-rails,ruby,callback,Ruby On Rails,Ruby,Callback,我的应用程序中有一个拍卖和一个出价对象,当有人按下出价按钮时,它会调用创建出价的出价创建控制器,然后对拍卖对象执行一些其他操作: 投标控制器->创建 @auction.endtime += @auction.auctiontimer @auction.winner = @auction.arewinning @auction.save 拍卖模式 before_update :set_endtime def set_endtime self.endtime=self.starttime

我的应用程序中有一个拍卖和一个出价对象,当有人按下出价按钮时,它会调用创建出价的出价创建控制器,然后对拍卖对象执行一些其他操作:

投标控制器->创建

@auction.endtime += @auction.auctiontimer
@auction.winner = @auction.arewinning 
@auction.save
拍卖模式

before_update :set_endtime

def set_endtime
   self.endtime=self.starttime+self.auctiontimer
end

所以问题是:在这个特定的@auction.save中,C怎么能跳过“回调前”呢 看到这个了吗


是否有任何特定的条件,例如当您没有结束时间时,只有您需要设置结束时间(如果可以的话)

def set_endtime 
   if endtime.nil? 
     self.endtime=self.starttime+self.auctiontimer 
   end 
end 


您可以尝试使用skip_callback跳过回调


ActiveSupport::Callbacks::ClassMethods\skip#u回调不是线程安全的,它将删除回调方法一段时间,直到它被执行为止,因此,同时另一个线程无法获取回调方法来执行


请看Allerin提供的信息性文章-

跳过回调
是一个复杂而不精细的选项

我更喜欢使用属性访问器:

attr_accessor :skip_my_method, :skip_my_method_2
after_save{ my_method unless skip_my_method }
after_save{ my_method_2 unless skip_my_method_2 }
这样,您可以在跳过回调时声明:

model.create skip_my_method: true # skips my_method
model.create skip_my_method_2: true # skips my_method_2

如果是新记录,您不想执行回调?或者这取决于操作?可能是@phoet的重复我尝试过这个答案,但我认为在rails 4中不起作用这是一种跳过验证的方法,我只想跳过回调:)是否有任何特定的条件,例如当您没有endtime时,如果您可以执行def set_endtime if endtime.nil,则只需要设置结束时间?self.endtime=self.starttime+self.auctiontimer end endUpdate my answer with example这是保存/更新回调的正确答案!那太好了!下面是关于这个方法的有用帖子:我也使用过这个。其他方法可能会遇到线程问题。考虑到您的方法,我尝试了与
rails 5
稍有不同的解决方案。请检查此答案,
skip\u callback
以何种方式不精确?
model.create skip_my_method: true # skips my_method
model.create skip_my_method_2: true # skips my_method_2