2017-02-14 3 views
0

Serialisierung ich ein Array von typisierten Objekten in einem Active Modell an Speicherung wie:undefinierte Klasse/Modul, wenn

class Store::Bin < ActiveRecord::Base 
    serialize :items, Array 
end 

class Store::Item 
    include Virtus.model 
    attribute :name, String 
    ... 
end 

Wenn ich eine Codeänderung in development Modus machen und meinen Browser aktualisieren, erhalte ich eine undefined class/module Store::Item Ausnahme.

Es scheint, als ob etwas mit der Klassenbelastung verzogen wird. Alle Dateien befinden sich in dem Verzeichnis app/models/store/..., das ordnungsgemäß mit ihrem Kamelcasenname benannt wird.

Das gleiche Problem tritt auf, wenn Sie die Rails-Konsole verwenden. reload! behebt das Problem nicht in der Konsole; Stattdessen muss ich die Konsole beenden und neu starten.

Antwort

0

Sie sollten den Operator :: bei der Definition von Klassen wegen Problemen mit der Autoload-Funktion von Rails vermeiden. Stattdessen versuchen

module Store 
    class Item 
    # ... 
    end 
end 

Wenn Sie nicht sicher sind, was auf Sie los Module.nesting verwenden können, um herauszufinden, wie Rails die Hierarchie interpretiert.

+0

Leider hat das Modul separat spezifiziert Verwendung nicht mein Problem zu lösen, weil es auf dem Autoloader verwandt war nicht die Anforderung an die serialisierte Klasse zu sehen: Shop :: Item – vanboom

0

Das Hinzufügen eines Typs zum Array schien das Problem zu lösen .... verursachte jedoch ein Problem mit der zugehörigen FactoryGirl-Factory.

class Store::Bin < ActiveRecord::Base 
    serialize :items, Array[Store::Item] 
end 

UPDATE: das eigentliche Problem war, dass, wenn eine Codeänderung speichern/bin.rb gemacht wird, dass die Klasse bekommt automatisch geladen, aber der Autoloader hatte keine Ahnung, dass Shop :: Item eine Abhängigkeit war.

THE REAL UPDATE: Deklarieren Sie die erforderliche Abhängigkeit require_dependency

require_dependency "store/item" 
class Store::Bin < ActiveRecord::Base 
    serialize :items, Array 
end 
Verwandte Themen