instance_of?返回意外结果

时间:2012-02-12 21:49:08

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我有一个观察者跟随两个模型:

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 个答案:

答案 0 :(得分: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