Зачем вам это нужно?
Я думаю, что было бы лучше создать таблицу Страницы с внешним ключом для вашего стола Кампании.
Пример (я использую Sequel):
require 'sequel'
DB = Sequel.sqlite
DB.create_table :Campaigns do
primary_key :id
column :campaign_id, :integer
column :date, :date
column :name, :string
end
DB.create_table :Pages do
primary_key :id
foreign_key :campaign_id, :Campaigns
column :text, :string
end
key = DB[:Campaigns].insert(:campaign_id => 01, :date=> Date.new(2012,1,1), :name => 'FirstCampaign')
DB[:Pages].insert(:campaign_id => key, :text => 'text for FirstCampaign')
key = DB[:Campaigns].insert(:campaign_id => 02, :date=> Date.new(2012,1,1), :name => 'SecondCampaign')
DB[:Pages].insert(:campaign_id => key, :text => 'text for SecndCampaign')
#All pages for 1st campaign
p DB[:Pages].filter(
:campaign_id => DB[:Campaigns].filter(:campaign_id => 1).first[:id]
).all
Но чтобы ответить на ваш вопрос: Вы можете попробовать использовать model hook.
Пример с Sequel:
require 'sequel'
DB = Sequel.sqlite
DB.create_table :Campaigns do
primary_key :id
column :campaign_id, :integer
column :date, :date
column :name, :string
end
class Campaign < Sequel::Model
def after_create
tabname = ("%05i_page" % self.campaign_id).to_sym
puts "Create table #{tabname}"
self.db.create_table(tabname) do
foreign_key :campaign
end
end
end
p DB.table_exists?(:'01_page') #-> false, table does not exist
Campaign.create(:campaign_id => 01, :date=> Date.new(2012,1,1), :name => 'FirstCampaign')
p DB.table_exists?(:'00001_page') #-> true Table created
Мой пример не тест, если таблица уже существует. Если вы действительно хотите его использовать,
Конечно, просто отправьте соответствующий CREATE TABLE в базу данных. Реальный вопрос, однако, почему вы пытаетесь это сделать? –
Стол одной таблицы становится огромным после добавления большого количества кампаний со своими страницами. Я пытаюсь ограничить размер таблицы страниц для каждой кампании. Пожалуйста, дайте мне знать, если вы знаете более умный способ сделать это. Я знаю, что мое решение не умное ха-ха. –
Кажется, что вам нужна отдельная таблица, связанная с каждой записью таблицы кампаний? Вы считали MongoDB? – moritz