Ich möchte eine Spalte namens type
verwenden, ohne Single Table Inheritance (STI) aufzurufen. Ich möchte nur, dass type
eine normale Spalte ist, die eine String
enthält.
Wie kann ich dies tun, ohne dass Rails erwartet, dass ich eine einzelne Tabellenvererbung habe und eine Ausnahme von 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.
auslöst?
Irgendwelche Ideen, wie das geht?
In Rails 3.1 ist set_inheritance_column
veraltet. Sie können auch nil
als Namen verwenden:
class Pancakes < ActiveRecord::Base
self.inheritance_column = nil
#...
end
Sie können den Namen der STI-Spalte mit set_inheritance_column
überschreiben:
class Pancakes < ActiveRecord::Base
set_inheritance_column 'something_you_will_not_use'
#...
end
Wählen Sie also einen Spaltennamen aus, den Sie nicht verwenden möchten, und geben Sie diesen an set_inheritance_column
weiter.
Ich weiß, dass diese Frage ziemlich alt ist und dies ein wenig von der Frage abweicht, die Sie stellen, aber was ich immer mache, wenn ich den Drang verspüre, einen Spaltentyp oder etwas-Typ zu nennen, suche ich nach einem Synonym des Typs und verwende stattdessen:
Hier sind ein paar Alternativen: Art, Sorte, Sorte, Kategorie, Set, Genre, Art, Reihenfolge usw.
Schienen 4.x
Ich bin auf das Problem in einerRails 4
app gestoßen, aber in Rails 4 ist die set_inheritance_column
-Methode überhaupt nicht vorhanden, so dass Sie es nicht verwenden können.
Die Lösung, die für mich funktionierte, bestand darin, die Vererbung einzelner Tabellen zu deaktivieren, indem die inheritance_column
-Methode von ActiveRecord
wie folgt überschrieben wurde:
class MyModel < ActiveRecord::Base
private
def self.inheritance_column
nil
end
end
Ich hoffe es hilft!
Wenn Sie dies für alle Modelle tun möchten, können Sie dies in einem Initialisierer speichern.
ActiveSupport.on_load(:active_record) do
class ::ActiveRecord::Base
# disable STI to allow columns named "type"
self.inheritance_column = :_type_disabled
end
end