Rails: не может загрузить приборы для таблицы, используя STI (неопределенный метод refle_on_all_associations ') - PullRequest
2 голосов
/ 10 декабря 2010

Я не могу загрузить приборы для своего стола, который использует STI.

Когда я звоню FIXTURES=schools rake db:fixtures:load, я получаю эту ошибку:

undefined method `reflect_on_all_associations' for Object:Class
  • Другие приспособления под нагрузкой, т. Е. FIXTURES=committes rake db:fixtures:load
  • Устройство было создано с помощью вызова rake db:fixtures:extract

Вот моя миграция школ:

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

У меня есть несколько файлов моделей, т.е. school.rb:

class School < ActiveRecord::Base
end

А secondary_school.rb:

class SecondarySchool < School
end

Вот трассировка стека:

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

И несколько образцов 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: 

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Проблема закончилась тем, что одна из записей имела пустое / пустое значение для типа. Убедитесь, что каждая строка в вашей таблице STI имеет тип.

0 голосов
/ 10 декабря 2010

Объект School имеет поле с именем type, которое зарезервировано для наследования одной таблицы. переименование этого поля должно решить проблему.

...