왜 필요한가요?
나는 당신의 테이블 캠페인에 외래 키가있는 테이블 페이지를 만들 더 나은 것 같아요.
예 (내가 속편을 사용) :
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를 사용을 시도 할 수 있습니다.
속편와 예 : 테이블이 이미 존재하는 경우
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