2012-05-21 24 views
0

我已在在我ProductTrackListing模型以下:的Rails上创建方法3.1 before_create仅

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

private 

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

以我控制器I有标准创建方法,可处理其从父“释放”复制初始曲目,在那里复制父级发布的跟踪位置。

我有另一个名为'add_catalogue_track'的自定义方法,用于处理需要始终通过acts_as_list添加的添加,无论父版本轨道位置如何。

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

在此先感谢。

回答

2

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

您是使用create()new(),然后save()add_catalogue_track()?如果是这样,那将触发回调。

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

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

+0

是的,我使用新的(),所以这是什么触发它。这工作完美的想法,所以谢谢你!即使它的工作,我不知道我理解的语法,会很方便知道....我会谷歌它虽然。再次感谢。 – Raoot

+0

@RyanBerry,没有问题。查看这个apidock页面以获取关于该方法的更多信息:http://apidock.com/rails/ActiveSupport/Callbacks/ClassMethods/skip_callback。另外,如果这对你有用,请将答案标记为正确。谢谢! – Calvin