今天偶然翻阅 Agile Web Development with Rails 第二版11月28日版本
发现迁移一张有所改动 欣喜 以为ruby本身是没有float的
所以在在于数据库版本迁移的时候 会有些出入的
今 偶然发现
alter table products add column price decimal(8,2);
在Migration中可以这么写
add_column
roducts,
rice, :decimal,
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.
#
recision: Specifies the precision for a :decimal column.
#
recision: 指定:decimal字段的精度
#:scale: Specifies the scale for a :decimal column.
#:scale: 指定:decimal字段的scale
#MySQL:
recision [1..63], :scale [0..30]. Default is (10,0).
#PostgreSQL:
recision [1..infinity], :scale [0..infinity]. No default.
add_column :table, :column, :type #添加段
rename_column :table,
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,
ld_name
remove_column :table, :column
drop_table :table #删除表格
remove_index :table, :column
end