Object#is_a?
está fallando en la forma más extraña en Rails 3. Tengo una sola mesa-herencia establecido de la siguiente manera (simplificado por razones de brevedad):is_a? falla con la herencia de una sola mesa en Rails 3
# resource.rb
class Resource < ActiveRecord::Base
# blah blah
end
# video.rb
class Video < Resource
# blah blah
end
En mi controlador, tengo esto:
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
Invocando la acción #create
genera estos resultados del registro:
@resource class: Video
@resource superclass: Resource
@resource is_a?(Video): true
@resource is_a?(Resource): false
@resource is_a?(ActiveRecord::Base): true
Tenga en cuenta que la instancia Video
es una ActiveRecord::Base
, sin embargo, no es a Resource
. Esto no es solo una preocupación académica. El código de Framework llamado desde la acción usa is_a?
para verificar la discrepancia de tipo, y aumenta cuando cree que el Video
no es un Resource
.
Sin embargo, en la consola de Rails, is_a?(Resource)
devuelve verdadero.
¿Qué demonios podría estar pasando aquí?
He notado este mismo problema en los carriles 2.3.14/ruby 1.8.7 – Sukima