Ich möchte eine Spalte verwenden, die aufgerufen wird, type
ohne Single Table Inheritance (STI) aufzurufen. Ich möchte type
nur eine normale Spalte sein, die a enthält String
.
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?
rails 3.2
. Laut apidock : 'Diese Methode ist in der neuesten stabilen Version veraltet oder verschoben. Die letzte vorhandene Version (v3.1.0) wird hier angezeigt. ' Danke für den Tipp!inheritance_column
Leser wird bewegt (daher "veraltet oder verschoben" Hinweis). Die Verwendung derinheritance_column
direkten Einstellung der Instanzvariablen ist beabsichtigt und nicht veraltet.Sie können den STI-Spaltennamen überschreiben, indem Sie
set_inheritance_column
:class Pancakes < ActiveRecord::Base set_inheritance_column 'something_you_will_not_use' #... end
Wählen Sie also einen Spaltennamen aus, den Sie für nichts verwenden, und geben Sie ihn an
set_inheritance_column
.quelle
Ich weiß, dass diese Frage ziemlich alt ist und 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 benennen, ist, dass ich nach einem Synonym für Typ suche und dieses stattdessen verwende:
Hier sind einige Alternativen: Art, Sorte, Sorte, Kategorie, Set, Genre, Art, Reihenfolge usw.
quelle
Schienen 4.x.
Ich bin auf das Problem in einer
Rails 4
App gestoßen , aber in Rails 4 existiert dieset_inheritance_column
Methode überhaupt nicht, sodass Sie sie nicht verwenden können.Die Lösung, die für mich funktioniert hat, bestand darin, die Vererbung einzelner Tabellen durch Überschreiben
ActiveRecord
der folgendeninheritance_column
Methode zu deaktivieren :class MyModel < ActiveRecord::Base private def self.inheritance_column nil end end
Ich hoffe es hilft!
quelle
class MyModel < ActiveRecord::Base
self.inheritance_column = nil
end
. Referenz: apidock.com/rails/ActiveRecord/ModelSchema/ClassMethods/…Wenn Sie dies für alle Modelle tun möchten, können Sie dies in einen Initialisierer stecken.
ActiveSupport.on_load(:active_record) do class ::ActiveRecord::Base # disable STI to allow columns named "type" self.inheritance_column = :_type_disabled end end
quelle