ruby on rails - Rieles: ¿usa una columna tipo sin STI?
ruby-on-rails ruby-on-rails-3 (5)
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
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?
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.
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
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!