Jak zrefactorować after_create callback?

Jak mogę zrefaktorować ten after_create callback?

after_create { |f| if f.target.class.eql?(Question) if f.target.user != User.current_user Notify.create_notify( Notify::QUESTION_FOLLOW, f.target.user, User.current_user, f.target) end elsif f.target.class.eql?(User) Notify.create_notify( Notify::USER_FOLLOW, f.target, User.current_user,f.target) if f.target.can_mail_user(:follower) end }
Wiem, że lepiej wygląda jako blok

after_create do |f| if f.target.class.eql?(Question) if f.target.user != User.current_user Notify.create_notify( Notify::QUESTION_FOLLOW, f.target.user, User.current_user, f.target) end elsif f.target.class.eql?(User) Notify.create_notify( Notify::USER_FOLLOW, f.target, User.current_user,f.target) if f.target.can_mail_user(:follower) end end
Moge go jeszcze przerzucić do osobnej metody z self.
Ale może da się jeszcze coś z tym zrobić ?? Szczególnie mnie interesuje sprawa z tymi ifami.

[code=ruby]if f.target.is_a?(Question) && f.target.user != User.current_user
type, target = Notify::QUESTION_FOLLOW, f.target.user
elsif f.target.is_a?(User) && f.target.can_mail_user(:follower)
type, target = Notify::USER_FOLLOW, f.target
end

if var1 && var2
Notify.create_notify(type, target, User.current_user, f.target)
end[/code]
Nigdy nie porównuj #class, do tego są metody #is_a? #kind_of? #instance_of? http://stackoverflow.com/questions/3893278/ruby-kind-of-vs-instance-of-vs-is-a

A poza tym, całe to sprawdzanie przeniósłbym do metody create_for w klasie Notfy

[code=ruby]class Notify
def self.create_for(obj)
if obj.is_a?(Question) && obj.user != User.current_user
type, target = QUESTION_FOLLOW, obj.user
elsif obj.is_a?(User) && obj.can_mail_user(:follower)
type, target = USER_FOLLOW, obj
end

create_notify(type, target, User.current_user, obj)

end
end

i wtedy

after_create do |f|
Notify.create_for(f.target)
end[/code]

Zamiast sprawdzać klasy, stwórz w tych klasach metody o takich samych nazwach i umieść w nich ten kod z if i else.

[code=ruby]after_create do |f|
f.target.create_notify
end

class Question
def create_notify
Notify.create_notify(Notify::QUESTION_FOLLOW, user, User.current_user, self)
end
end[/code]
Nie wiem też czy dobrze myślę co chcesz zrobić, ale na 90% nie chcesz mieć w kodzie User.current_user