Rieles: ¿usa una columna tipo sin STI?

Quiero utilizar una columna llamada type sin invocar herencia de tabla única (ITS): solo quiero que el type sea ​​una columna normal que contiene una String .

¿Cómo puedo hacer esto sin que Rails espere que tenga herencia de tabla única y lanzar 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?

En Rails 3.1 set_inheritance_column está en desuso, también puedes usar nil como nombre, así:

 class Pancakes < ActiveRecord::Base self.inheritance_column = nil #... end 

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 usará para nada y alimente eso a set_inheritance_column .

Sé que esta pregunta es bastante antigua y esto se aparta un poco de la pregunta que me hace, pero lo que siempre hago cuando siento la necesidad de nombrar un tipo de columna o algo_es decir es que busco un sinónimo de tipo y lo uso en su lugar:

Aquí hay un par de alternativas: tipo, género, variedad, categoría, conjunto, género, especie, orden, etc.

Rails 4.x

Encontré el problema en una aplicación de Rails 4 , pero en Rails 4 el método set_inheritance_column no existe en absoluto, así que no puedes usarlo.

La solución que funcionó para mí fue deshabilitar la herencia de tabla única anulando el método inheritance_column de ActiveRecord , como este:

 class MyModel < ActiveRecord::Base private def self.inheritance_column nil end end 

¡Espero eso ayude!

Si desea hacer esto para todos los modelos, puede pegar esto 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