1 剖析遷移任務(wù)的構(gòu)造
class CreateProducts < ActiveRecord::Migration
def up
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
def down
drop_table :products
end
end
這個(gè)遷移任務(wù)建立了一張叫 products 的數(shù)據(jù)庫表肉拓,這張表中包含一個(gè)名為 name 的 string 類型字段和一個(gè)名為 description 的 text 類型字段帆阳。與此同時(shí)跷乐,一個(gè)名為 id 的字段也會被添加,這個(gè)字段是默認(rèn)添加挫以,我們不需要另外請求舵盈。
另外 Active Record 所需要的時(shí)間戳( timestamp )字段( created_at 和 updated_at )也會被自動添加。而要取消這個(gè)任務(wù)只需簡單地把這張表刪除掉即可教翩。
2.1 創(chuàng)建Migration
$ rails generate migration AddPartNumberToProducts
使用標(biāo)準(zhǔn)的"AddXXXToYYY" 或者"RemoveXXXFromYYY"生成時(shí)
$ rails generate migration AddPartNumberToProducts part_number:string
會生成如下結(jié)果
class AddPartNumberToProducts < ActiveRecord::Migration
def change
add_column :products, :part_number, :string
end
end
我們也可以使用migration來刪除
rails generate migration RemovePartNumberFromProducts part_number:string
會生成如下代碼
class RemovePartNumberFromProducts < ActiveRecord::Migration
def change
remove_column :products, :part_number, :string
end
end
添加數(shù)據(jù)
$ rails generate migration AddDetailsToProducts part_number:string price:decimal
生成如下代碼
class AddDetailsToProducts < ActiveRecord::Migration
def change
add_column :products, :part_number, :string
add_column :products, :price, :decimal
end
end
如果我們使用CreateXXX 和一些列定義,會自動代碼如下所示
$ rails generate migration CreateProducts name:string part_number:string
將會生成下面的代碼
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.string :name
t.string :part_number
end
end
end
在多對多關(guān)系型表單時(shí)贪壳,我們可以使用下面的代碼生成中間表
rails g migration CreateJoinTableCustomerProduct customer product
會生成下面代碼
class CreateJoinTableCustomerProduct < ActiveRecord::Migration
def change
create_join_table :customers, :products do |t|
# t.index [:customer_id, :product_id]
# t.index [:product_id, :customer_id]
end
end
end
2.2 模型生成
rails generate model Product name:string description:text
2.3 類型修改
-
limit
Sets the maximum size of the string/text/binary/integer fields -
precision
Defines the precision for the decimal fields -
scale
Defines the scale for the decimal fields -
polymorphic
Adds a type column for belongs_to associations -
null
Allows or disallows NULL values in the column.