2

Ich kann Fixtures für meine Tabelle, die STI verwendet, nicht laden.Rails: kann Fixtures für Tabelle nicht mit STI laden (undefinierte Methode `reflect_on_all_associations ')

Als ich FIXTURES=schools rake db:fixtures:load nennen, ich diesen Fehler:

undefined method `reflect_on_all_associations' for Object:Class 
  • Andere Anlagen laden fein, dh FIXTURES=committes rake db:fixtures:load
  • Die Befestigung durch den Aufruf rake db:fixtures:extract

erstellt wurde Hier Migration meine Schulen :

Ich habe ein paar Modelldateien, dh school.rb:

class School < ActiveRecord::Base 
end 

Und secondary_school.rb:

class SecondarySchool < School 
end 

Hier ist der Stack-Trace:

undefined method `reflect_on_all_associations' for Object:Class 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/fixtures.rb:597:in `insert_fixtures' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/fixtures.rb:568:in `each' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/fixtures.rb:568:in `insert_fixtures' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/fixtures.rb:512:in `create_fixtures' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/fixtures.rb:512:in `each' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/fixtures.rb:512:in `create_fixtures' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/connection_adapters/abstract/database_statements.rb:136:in `transaction' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/fixtures.rb:510:in `create_fixtures' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/connection_adapters/mysql_adapter.rb:267:in `disable_referential_integrity' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/fixtures.rb:501:in `create_fixtures' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/base.rb:1482:in `silence' 
/home/loranaw/ruby/gems/gems/activerecord-2.3.10/lib/active_record/fixtures.rb:500:in `create_fixtures' 
/home/loranaw/ruby/gems/gems/rails-2.3.10/lib/tasks/databases.rake:223 
/home/loranaw/ruby/gems/gems/rails-2.3.10/lib/tasks/databases.rake:222:in `each' 
/home/loranaw/ruby/gems/gems/rails-2.3.10/lib/tasks/databases.rake:222 

Und einige Beispiel YML:

--- 
schools_7133: 
    city: Nahanni Butte 
    name: Charles Yohin School 
    created_at: 2010-11-26 02:36:39 
    grade_range: K-10 
    latitude: "61.03349" 
    country: CA 
    updated_at: 0000-00-00 00:00:00 
    postal_code: "X0E 0N0" 
    url: 
    street: "" 
    id: "9682" 
    type: SecondarySchool 
    fax: (867) 602-2202 
    phone: (867) 602-2200 
    funding: 
    longitude: "-123.38642" 
    school_type: 
    province: NT 
    email: 

Antwort

0

Das Problem endete als einer der Datensätze hatte einen leeren/leeren Wert für den Typ. Stellen Sie sicher, dass jede Zeile in Ihrer STI-Tabelle einen Typ hat.

0

Das School-Objekt hat ein Feld namens type, das für die Vererbung einzelner Tabellen reserviert ist. Umbenennen dieses Feld sollte das Problem lösen.

+0

Ich verwende STI. Typ wird verwendet, um SecondarySchool, PrimarySchool usw. zu speichern. –

+0

Erhalten Sie immer noch den Fehler, auch wenn Sie den Typ umbenennen, um "school_type" zu sagen? Das Schlüsselwort "type" ist geschützt und hat Programmierer schon während der direkten Aktualisierung mit der update_attribute-Methode wirklich diskriminiert. Also schlage ich vor, dass Sie es umbenennen, anstatt es irgendwie zu umgehen. – Raghu

+0

Wenn Sie mich nicht verstanden haben, was ich eigentlich sagen möchte, ist in Ihrer Schienenmigration, wo Sie die Schulen erstellen, sollten Sie t.string: type in t.string: school_type umbenennen. Hoffe, dies sollte die Dinge klarstellen – Raghu