Rails 3.1 before_create仅适用于create方法

时间:2012-05-21 21:17:33

标签: ruby-on-rails ruby-on-rails-3

我的ProductTrackListing模型中有以下内容:

acts_as_list :scope => :product_id
before_create :set_initial_position, :only => :create

private

def set_initial_position
   self.position = self.track.position
end

在我的控制器中,我有标准的Create方法,它处理从父'release'复制的初始轨道列表,在那里复制父释放轨道位置。

我有另一个名为'add_catalogue_track'的自定义方法,用于处理需要始终通过acts_as_list添加的添加内容,而不管父发布跟踪位置如何。

我最初虽然提到了控制器创建方法的before_create调用,但它也在我的自定义方法上调用。所以简而言之,我的问题是如何使before_create仅应用于create方法,我尝试了`add_catalogue_track'但是这不起作用。

提前致谢。

1 个答案:

答案 0 :(得分:2)

after_create由调用Base.save的任何内容触发,并且是新记录。 create方法实际上只是一次调用newsave的便捷方法。

您是否在create()中使用new()save()然后add_catalogue_track()?如果是这样,那就是触发回调的原因。

您可以做的一件事是在自定义方法中使用skip_callback

ProductTrackListing.skip_callback(:create, :before, :set_initial_position)