在模型上用户有after_create :apply_role
和after_update :apply_role
,我希望获得apply_role
方法的当前回调名称。
类似的东西:
def apply_role
if callback_name == 'after_create'
# other stuff here
else
# other stuff here
end
end
我知道我可以在after_create
和after_update
之间设置不同的方法,但在我的情况下,after_create
和after_update
上的方法除了一行之外没有什么不同,所以我想要重构我的代码和我只需要一个方法进行多次回调。
我该怎么做?
答案 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_save
(true
)或after_update
(false
)回调
像这样:
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