SQLite动态创建表

时间:2013-07-14 18:43:56

标签: ruby ruby-on-rails-3 sqlite

我在SQLite中有一个表,当在此表中创建一个条目时,我想为第一个表中的每个条目创建一个新表。 (我想在Ruby On Rails中这样做,如果有帮助的话)

这是一个澄清我想要实现的目标的例子:

假设有一个表格:广告系列

广告系列

Campaign_ID,日期,名称

所以,如果我输入一个条目:

01 06/12 FirstCampaign

有没有办法创建一个名为{{Campaign_ID} _Page

的新表

即:

01_Page

(此表的字段转到此处)

1 个答案:

答案 0 :(得分:0)

为什么需要它?

我认为最好为表格“营销活动”创建一个包含外键的表格。

一个例子(我使用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

续集的一个例子:

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

如果表已经存在,我的示例没有测试。如果你真的想使用它,