2012-02-12 4 views
1

У меня есть наблюдатель следующие две модели:instance_of? возвращая неожиданный результат

class MyObserver < ActiveRecord::Observer 
    observe :my_first_model, :my_second_model 

    def after_create(record) 
    x = if record.instance_of?(MyFirstModel) 
     # x is set to one thing 
    elsif record.instance_of?(MySecondModel) 
     # x is set to another thing 
    end 

    # use x in a common way 
    end 
end 

Как вы можете видеть, я устанавливаю x что-то другое в зависимости от модели, создание которой наблюдается.

Я получаю неожиданные результаты, используя instance_of? и kind_of?. Например, я могу сделать Rails.logger.debug record.class.name и посмотреть MyFirstModel, но record.instance_of?(MyFirstModel) возвращает false.

Неужели кто-нибудь сталкивался с этим раньше? Я использую Ruby 1.9.3 и Rails 3.1.

Между тем, я собираюсь обратиться к record.class.name.inquiry.MyFirstModel? или что-то подобное.

ответ

1

Используйте заявление case для этого.

def after_create(record) 
    x = case record 
    when MyFirstModel 
     # x is set to one thing 
    when MySecondModel 
     # x is set to another thing 
    else ; return false 
    end 

    # use x in a common way 
end 
+0

Спасибо за ответ, @gg_s. Я не знал, что вы могли бы использовать имя класса в аргументе case, так что что-то новое узнали. К сожалению, это не решило проблему, и «запись» неправильно идентифицируется. – tristanm

Смежные вопросы