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:
J'utilise STI. Type est utilisé pour stocker SecondarySchool, PrimarySchool, etc. –
Ê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
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