Object#is_a?
терпит неудачу в странном образе в Rails 3. Я однотабличное-наследование установить следующий образ (упрощенный для краткости):is_a? терпит неудачу с наследованием одной таблицы в Rails 3
# resource.rb
class Resource < ActiveRecord::Base
# blah blah
end
# video.rb
class Video < Resource
# blah blah
end
В моем контроллере, Я это:
def create
@resource = Resource.find params[:resource_id]
logger.info '@resource class: ' + @resource.class.name
logger.info '@resource superclass: ' + @resource.class.superclass.name
logger.info '@resource is_a?(Video): ' + @resource.is_a?(Video).inspect
logger.info '@resource is_a?(Resource): ' + @resource.is_a?(Resource).inspect
logger.info '@resource is_a?(ActiveRecord::Base): ' + @resource.is_a (ActiveRecord::Base).inspect
# Do some other stuff
end
Вызов #create
действие генерирует эти результаты журнала:
@resource class: Video
@resource superclass: Resource
@resource is_a?(Video): true
@resource is_a?(Resource): false
@resource is_a?(ActiveRecord::Base): true
Обратите внимание, что пример Video
: a ActiveRecord::Base
, но это не a Resource
. Это не просто академическая проблема. Код Framework, вызываемый из действия, использует is_a?
для проверки несоответствия типа, и он поднимает, когда он считает, что Video
не является Resource
.
В консоли Rails is_a?(Resource)
возвращает true.
Что может быть в мире?
Я заметил эту же проблему в рельсах 2.3.14/ruby 1.8.7 – Sukima 2012-04-04 19:36:11