2012-08-11 99 views

回答

1

據我所知,這是不可能與ActiveRecord,但如果你不介意改變ORM你可以看看DataMapper而不是。

使用DM,您可以在模型代碼本身中定義模型的'屬性'(屬性),然後只需運行rake db:automigrate即可更新數據庫的模式,例如,

class Blog 
    property :title, String 
    property :body,  Text 
    property :user_id, Integer, :required => true 
end 
1

隨着Sequel可以

爲例(使用SQLite,但它同樣與其他適配器)

首先正常啓動:

require "sequel" 
DB = Sequel.sqlite(DB_NAME) 

# create an items table 
DB.create_table :items do 
    primary_key :id 
    String :name 
    Float :price 
end 

# [....] 

require "sequel" 
DB = Sequel.sqlite('test.db') 

# create an items table 
DB.create_table :items do 
    primary_key :id 
    String :name 
    Float :price 
end 

之後,您可以修改表:

DB.add_column :items, :valid_from, Date 

以下修改是可能的(或許還有更多):

  • add_column
  • add_index
  • create_view
  • drop_column
  • drop_index
  • drop_table
  • drop_view
  • rename_table
  • rename_column
  • set_column_default
  • set_column_type

在結合rake你可以這樣做:

require "rake" 
require "sequel" 

task :connect do 
    DB = Sequel.sqlite('test.db') 
end 

desc 'create an items table' 
task :create_items => :connect do 
    DB.create_table :items do 
    primary_key :id 
    String :name 
    Float :price 
    end 
end 

task :add_dates_to_items => :connect do 
    #check if items exist is missing 
    DB.add_column :items, :valid_from, Date 
end 

注:遷移是一個幫助避免模式的錯誤序列修改。使用Migrations可以定義正確的順序。實際狀態已存儲,您可以降級。

相關問題