0

我的 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 方法,它处理从父“发布”复制的初始轨道列表,它复制父发布轨道位置。

我设置了另一个名为“add_catalogue_track”的自定义方法来处理需要始终通过acts_as_list 添加到最后的添加,而不管父发布轨道位置如何。

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

提前致谢。

4

1 回答 1

2

after_create由调用 的任何东西触发Base.save,并且是一条新记录。该create方法实际上只是一种方便的方法,用于一次调用newsave

你是在使用create()还是new()然后save()add_catalogue_track()?如果是这样,那将是触发回调的原因。

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

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

于 2012-05-21T21:50:26.000 回答