Как уже упоминалось выше, работает.Но в общем случае, когда у вас есть Task :: module, класс Task :: Base и несколько подклассов Task :: Base, следующее является более понятным:
определяет вашу таблицу STI, используя имя модуля
create_table task_bases do |t|
# t.integer :id - implicitly generated
t.string :type # for STI support
t.integer :project_id
end
create app / models / <module_name>
.rb
Этот файл просто включает все файлы в подкаталоге <module_name>
:
# file: app/models/task.rb
module Task
require 'task/base' # comment out unless task/base.rb must be loaded first
Dir[Rails.root.join("app/models/task/**/*.rb").to_s].each {|f| require f}
end
create app/models/<module_name>
/base.rb
Добавьте сюда любую функциональность, которая является общей для всех подклассов.Обратите внимание, что именно здесь мы определяем имя таблицы STI.
# file: app/models/task/base.rb
module Task
class Base < ActiveRecord::Base
self.table_name = 'tasks'
# include common functionality here
end
end
создаем любые необходимые вам подклассы.
# file: app/models/task/batch.rb
module Task
class Batch < Base
# batch specific code here
end
end
# file: app/models/task/sequential.rb
module Task
class Sequential < Base
# sequential specific code here
end
end