Я настроил STI в проекте очень давно.Я забыл подробности сейчас, но вот код из этого проекта, который может помочь.Это из Rails 2.3.4.Не уверен, как это будет выглядеть в Rails 3. По умолчанию Rails с предположением, что любой столбец с именем type существует для целей наследования одной таблицы.Если вам нужно указать, используйте «set_inheritance_column», как вы видите ниже.Я не припоминаю возможности защитить атрибуты одного подкласса от других подклассов.Как вы упомянули, все хранится в одной таблице.Я думаю, что пытался в то время и не мог, но я был очень плохо знаком с Rails в то время.Я думаю, что это может быть выполнено с attr_accessable или что-то на подклассе.Хотя я могу ошибаться, но попробуйте.
class User < ActiveRecord::Base
set_inheritance_column :user_type
attr_protected :user_type
end
class BusinessOwner < User
has_many :businesses
end
class SiteUser < User
end
Из схемы:
create_table "users", :force => true do |t|
t.string "user_type"
t.string "username"
t.string "email"
t.integer "location_id"
...
end