2

Je ne peux pas charger les appareils pour ma table qui utilise STI.Rails: impossible de charger les appareils pour table en utilisant STI (méthode non définie `reflect_on_all_associations ')

Quand j'appelle FIXTURES=schools rake db:fixtures:load, je reçois cette erreur:

undefined method `reflect_on_all_associations' for Object:Class 
  • Autres installations chargent très bien, à savoir FIXTURES=committes rake db:fixtures:load
  • Le dispositif a été créé en appelant rake db:fixtures:extract

Voilà ma migration des écoles :

class CreateSchools < ActiveRecord::Migration 
    def self.up 
    create_table :schools do |t| 
     t.string :name 
     t.string :type 
     t.string :street 
     t.string :city 
     t.string :province 
     t.timestamps 
    end 
    end 
... 
end 

J'ai quelques fichiers de modèle, à savoir school.rb:

class School < ActiveRecord::Base 
end 

Et secondary_school.rb:

class SecondarySchool < School 
end 

Voici la trace de la pile:

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 

Et certains échantillons 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: 

Répondre

0

Le problème s'est avéré être l'un des enregistrements avait une valeur vide/vide pour le type. Assurez-vous que chaque ligne dans votre table STI a un type.

0

L'objet School a un champ appelé type, qui est réservé pour l'héritage de table unique. renommer ce champ devrait résoudre le problème.

+0

J'utilise STI. Type est utilisé pour stocker SecondarySchool, PrimarySchool, etc. –

+0

Êtes-vous toujours l'erreur même après avoir renommé le type pour dire school_type? Le mot-clé "type" est protégé et a été très discriminant pour les programmeurs même lors de mises à jour directes en utilisant la méthode update_attribute. Je vous suggère donc de le renommer plutôt que d'essayer de le contourner d'une manière ou d'une autre. – Raghu

+0

Si vous ne me compreniez pas alors ce que j'essaie de dire est dans la migration des rails où vous créez les écoles, vous devez renommer le t.string: tapez t.string: school_type. J'espère que cela devrait clarifier les choses. – Raghu