2007年2月7日星期三

Ruby on Rails 数据库Migration操作语句实例

今天偶然翻阅 Agile Web Development with Rails 第二版11月28日版本

发现迁移一张有所改动 欣喜 以为ruby本身是没有float的

所以在在于数据库版本迁移的时候 会有些出入的

今 偶然发现

alter table products add column price decimal(8,2);

在Migration中可以这么写

add_column p:roducts, p:rice, :decimal, p:recision => 8, :scale => 2, :default => 0

是不是 精确多了 哈哈

下面是对Migration的一点点总结





def self.up # db schema更新到下一版本
create_table :table, :force => true do |t| #创建表格
t.column :name, :string
t.column :age, :integer, { :default => 42 }
t.column :description, :text
# :string, :text, :integer, :float,:decimal, :datetime, :timestamp, :time, :date,
# :binary, :boolean

end
#options hash like { :default => 11 :limit => 50, :null => false }
#选项还有 以上hash值
#:limit: Requests a maximum column length (:string, :text, :binary or :integer columns only)
#:limit:请求一个最大的字段长度 (字段只润许 :string, :text, :binary 或:integer)

#:default: The column’s default value. Use nil for NULL.
#:default: 字段的默认值 用灵或者是空值

#:null: Allows or disallows NULL values in the column. This option could have been named :null_allowed.
#:null: 准许或者禁止字段中使用空值 这个选项也可以被叫做 :null_allowed.

p:recision: Specifies the precision for a :decimal column.
p:recision: 指定:decimal字段的精度

#:scale: Specifies the scale for a :decimal column.
#:scale: 指定:decimal字段的scale

#MySQL: p:recision [1..63], :scale [0..30]. Default is (10,0).
#PostgreSQL: p:recision [1..infinity], :scale [0..infinity]. No default.

add_column :table, :column, :type #添加段

rename_column :table, :o:ld_name, :new_name #修改段名
change_column :table, :column, :new_type #修改段数据类型
execute "SQL语句"
add_index :table, :column, :unique => true, :name => 'some_name' #添加索引
add_index :table, [ :column1, :column2 ]
end

def self.down # 撤消操作
rename_column :table, :new_name, :o:ld_name
remove_column :table, :column
drop_table :table #删除表格
remove_index :table, :column
end

没有评论: