В комментарии я заметил, что вы нашли, что это работает, используя record.class.name
, но это не очень идиоматичный Ruby.В операторе Ruby case
для сравнения используется ===
, который отлично подойдет вам, если вы правильно его реализуете.
class NewsFeedObserver < ActiveRecord::Observer
observe :photo, :comment
def after_create(record)
case record
when Photo
# do photo stuff
when Comment
# do comment stuff
else
# do default stuff
end
end
end
По сути, это преобразуется в:
if Photo === record
# do photo stuff
elsif Comment === record
# do comment stuff
else
# do default stuff
end
Советую отметить следующее:
class Sample
end
s = Sample.new
Foo === s # true uses Class#===
s === Foo # false uses Object#===
===
реализован по-разному в Class
и Object