Quiero usar una columna llamada type
sin invocar la herencia de tabla única (STI); solo quiero type
ser 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_column
lector se mueve (de ahí el aviso "en desuso o movido"). El uso de establecer lainheritance_column
variable 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' #... end
Así 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 4
aplicación, pero en Rails 4 elset_inheritance_column
mé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
ActiveRecord
elinheritance_column
método, como este:class MyModel < ActiveRecord::Base private def self.inheritance_column nil end end
¡Espero eso ayude!
fuente
class MyModel < ActiveRecord::Base
self.inheritance_column = nil
end
. 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 end
fuente