1 剖析迁移任务的构造
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
这个迁移任务建立了一张叫 products 的数据库表,这张表中包含一个名为 name 的 string 类型字段和一个名为 description 的 text 类型字段。与此同时,一个名为 id 的字段也会被添加,这个字段是默认添加,我们不需要另外请求。
另外 Active Record 所需要的时间戳( timestamp )字段( created_at 和 updated_at )也会被自动添加。而要取消这个任务只需简单地把这张表删除掉即可。
2.1 创建Migration
$ rails generate migration AddPartNumberToProducts
使用标准的"AddXXXToYYY" 或者"RemoveXXXFromYYY"生成时
$ rails generate migration AddPartNumberToProducts part_number:string
会生成如下结果
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
添加数据
$ 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
在多对多关系型表单时,我们可以使用下面的代码生成中间表
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.
网友评论