获取Callback ActiveRecord Rails的当前名称

时间:2015-08-11 05:41:24

标签: ruby-on-rails activerecord

在模型上用户有after_create :apply_roleafter_update :apply_role,我希望获得apply_role方法的当前回调名称。

类似的东西:

def apply_role
 if callback_name == 'after_create'
    # other stuff here
 else
    # other stuff here
 end
end

我知道我可以在after_createafter_update之间设置不同的方法,但在我的情况下,after_createafter_update上的方法除了一行之外没有什么不同,所以我想要重构我的代码和我只需要一个方法进行多次回调。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

尝试以下内容,我已经在代码本身中描述了注释中的更改。

def User < ActiveRecord::Base
  after_save :apply_role # this will gets called in case of create as well as update

  def apply_role
    if id_changed?
      # code to handle newly created record
    else
      # code to handle updated record
    end
  end
end

答案 1 :(得分:1)

要回答您的问题,您可以使用id_changed?来确定您是否在after_savetrue)或after_updatefalse)回调

像这样:

def apply_role
  if id_changed?
    # created
  else
    # updated
  end
end

虽然这通常不是这样做的。最好将它们分成单独的方法,并使用适当的方法及其相应的回调。

这样的事情:

after_create :apply_role
after_update :update_role

def apply_role
  # do stuff
end

def update_role
  # do other stuff
end