Chcę użyć kolumny o nazwie type
bez wywoływania dziedziczenia pojedynczej tabeli (STI) - chcę po prostu type
być zwykłą kolumną zawierającą String
.
Jak mogę to zrobić bez oczekiwania przez Railsy, że będę miał dziedziczenie pojedynczej tabeli i wyrzucania wyjątku 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.
?
Jakieś pomysły, jak to zrobić?
rails 3.2
. Według apidocka : „Ta metoda jest przestarzała lub przeniesiona do najnowszej stabilnej wersji. Tutaj pokazana jest ostatnia istniejąca wersja (v3.1.0). ' Dzięki za wskazówkę!inheritance_column
Czytnik został przeniesiony (stąd powiadomienie „przestarzałe lub przeniesione”). Użycie bezpośredniego ustawieniainheritance_column
zmiennej instancji jest zamierzone i nie jest przestarzałe.Możesz zastąpić nazwę kolumny STI za pomocą
set_inheritance_column
:class Pancakes < ActiveRecord::Base set_inheritance_column 'something_you_will_not_use' #... end
Więc wybierz nazwę kolumny, której nie będziesz używać do niczego i podaj ją
set_inheritance_column
.źródło
Wiem, że to pytanie jest dość stare i nieco odbiega od pytania, które zadajesz, ale zawsze robię, gdy mam ochotę nazwać typ kolumny lub coś_typ, szukam synonimu typu i używam go zamiast tego:
Oto kilka możliwości: rodzaj, sortowanie, różnorodność, kategoria, zestaw, gatunek, gatunek, porządek itp.
źródło
Szyny 4.x
I napotkał problem w
Rails 4
aplikacji, ale w Rails 4set_inheritance_column
metoda nie istnieje w ogóle, więc nie można z niego korzystać.Rozwiązanie że pracował dla mnie było wyłączyć pojedynczej tabeli dziedziczenie nadrzędnymi
ActiveRecord
„sinheritance_column
metody, na przykład:class MyModel < ActiveRecord::Base private def self.inheritance_column nil end end
Mam nadzieję, że to pomoże!
źródło
class MyModel < ActiveRecord::Base
self.inheritance_column = nil
end
. ŹródłaJeśli chcesz to zrobić dla wszystkich modeli, możesz umieścić to w inicjatorze.
ActiveSupport.on_load(:active_record) do class ::ActiveRecord::Base # disable STI to allow columns named "type" self.inheritance_column = :_type_disabled end end
źródło