Quiero usar una columna llamada typesin invocar la herencia de tabla única (STI); solo quiero typeser una columna normal que contenga una extensión String.
¿Cómo puedo hacer esto sin que Rails espere que tenga una herencia de tabla única y arroje una excepción de The single-table inheritance mechanism failed to locate the subclass...This error is raised because the column 'type' is reserved for storing the class in case of inheritance.?
¿Alguna idea sobre cómo hacer esto?

rails 3.2. Según apidock : 'Este método está obsoleto o se ha trasladado a la última versión estable. Aquí se muestra la última versión existente (v3.1.0). ' ¡Gracias por el consejo!inheritance_columnlector se mueve (de ahí el aviso "en desuso o movido"). El uso de establecer lainheritance_columnvariable de instancia directamente está previsto y no está en desuso.Puede anular el nombre de la columna STI usando
set_inheritance_column:class Pancakes < ActiveRecord::Base set_inheritance_column 'something_you_will_not_use' #... endAsí que elija un nombre de columna que no use para nada y alimente eso
set_inheritance_column.fuente
Sé que esta pregunta es bastante antigua y se desvía un poco de la pregunta que está haciendo, pero lo que siempre hago cuando siento la necesidad de nombrar un tipo de columna o algo_tipo es buscar un sinónimo de tipo y usarlo en su lugar:
Aquí hay un par de alternativas: tipo, clasificación, variedad, categoría, conjunto, género, especie, orden, etc.
fuente
Rieles 4.x
Encontré el problema en una
Rails 4aplicación, pero en Rails 4 elset_inheritance_columnmétodo no existe en absoluto, por lo que no puede usarlo.La solución que funcionó para mí fue deshabilitar la herencia de tabla única anulando
ActiveRecordelinheritance_columnmétodo, como este:class MyModel < ActiveRecord::Base private def self.inheritance_column nil end end¡Espero eso ayude!
fuente
class MyModel < ActiveRecord::Baseself.inheritance_column = nilend. Referencia: apidock.com/rails/ActiveRecord/ModelSchema/ClassMethods/…Si desea hacer esto para todos los modelos, puede pegarlo en un inicializador.
ActiveSupport.on_load(:active_record) do class ::ActiveRecord::Base # disable STI to allow columns named "type" self.inheritance_column = :_type_disabled end endfuente