2012-02-12 16 views
1

予期しない結果を返す:あなたが見ることができるようにinstance_of?私は2つのモデル以下のオブザーバー持っ

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私はあなたがそのようなケースステートメントでクラス名を使うことができたことを知りませんでした。悲しいことに、それは問題を解決せず、 '記録'が正しく識別されていません。 – tristanm

関連する問題