Ruby on Rails 2.3.10 を使用しています。私はクラスを持っていSchool
ます。私は STI を使用して、いくつかのサブクラスを提供してPrimarySchool
いSecondarySchool
ますUniversity
。
app/models/primary_school.rb:
class PrimarySchool < School
has_many :education_records, :foreign_key => "school_id"
end
app/models/secondary_school.rb:
class SecondarySchool < School
has_many :education_records, :foreign_key => "school_id"
end
app/models/university.rb
class University < School
has_and_belongs_to_many :applicants, :join_table => :applicants_schools, :foreign_key => "school_id"
end
db/migrate/20100824170203_create_schools.rb:
class CreateSchools < ActiveRecord::Migration
def self.up
create_table :schools do |t|
t.string :name
t.string :type # secondary, cegep, college, university
t.string :street
...
t.timestamps
end
end
def self.down
drop_table :schools
end
end
PrimarySchool.first
期待どおりにPrimarySchool.last
動作します。SecondarySchool.first
期待どおりにSecondarySchool.last
動作します。University.last
動作します。
ただし、例外を発生University.first
さUniversity.all
せます。ActiveRecord::SubclassNotFound
ActiveRecord::SubclassNotFound: The single-table inheritance mechanism failed to locate the subclass: 'University'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite University.inheritance_column to use another column for that information.
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:1671:in `instantiate'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:665:in `find_by_sql'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:665:in `collect!'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:665:in `find_by_sql'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:1582:in `find_every'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:619:in `find'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:639:in `all'
from (irb):6
from :0
生成された SQL は正しいです。
SecondarySchool Load (0.3ms) SELECT * FROM `schools` WHERE ( (`schools`.`type` = 'University' ) ) LIMIT 1
SecondarySchool Load (1.7ms) SELECT * FROM `schools` WHERE ( (`schools`.`type` = 'University' ) ) ORDER BY schools.id DESC LIMIT 1
私は何が欠けていますか/間違っていますか?