DB
rake常用指令
rake db:create # 建立目前 RAILS_ENV 環境的資料庫 rake db:create:all # 建立所有環境的資料庫 rake db:drop # 刪除目前 RAILS_ENV 環境的資料庫 rake db:drop:all # 刪除所有環境的資料庫 rake db:migrate # 執行 migration rake db:migrate RAILS_ENV=development # 指定 development 環境執行 migration rake db:migrate:up VERSION=20150713155732 # 執行特定版本的 migration rake db:migrate:down VERSION=20150713155732 # 回復特定版本的 migration rake db:rollback # To rollback the previous migration rake db:rollback STEP=3 # 回復前 3 個 migration rake db:version # 顯示 Current version: 20150713155732 rake db:seed # 執行 db/seeds.rb (種子資料) rake db:schema:dump # Dump the current db state. 產生 db/schema.rb rake db:setup # Creates the db, loads schema, & seed. ( When you start working on an existing app
- 不加上 RAILS_ENV 預設就是 development
- rails 的 db 可以分為 production 跟 development, 所以可以用 RAILS_ENV 指定哪個 DB
欄位型態
:string
: 有限的字串長度, 預設 varchar(255):text
: 不限的字串長度:integer
: 整數:float
: 浮點數:decimal
: 十進位數:datetime
: 日期時間:timestamp
: 時間戳章, 型態為 datetime:date
: 日期:time
: 時間:binary
: 二進位, blob:boolean
: 布林值:references
: 用來參照到其他 Table 的外部鍵, 型態為 integer
Migration
產生 migration 指令及命名慣例
rails g migration create_users # 建立 TABLE rails g migration add_confirmable_to_devise # 新增欄位 rails g migration change_comment_field_name # 修改欄位
migrate 的方式
def up # rake db:migrate 執行的 def down # rake db:rollback 執行的 def change # rake db:migrate 執行的
Create Table & 欄位
create_table(:users) do |t| t.column :id, 'INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)' t.string :video_id, :limit => 50, :null => false # primary key 但要自己產生 t.integer :kind , :limit => 1 , :default => 0 , :null => false , :unsigned => true t.boolean :is_hidden, :default => false ,:null => false t.datetime "delete_at" t.string "title" limit: 100, default: 0, null: false (VARCHAR) t.text "body" (TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2) t.timestamps (same as : t.datetime :created_at, :updated_at) t.references :article, index: true end
操作欄位
- 改default :
change_column_default :zombies, :is_admin, default: true
- 建立table :
create_table :videos do |t|
- 刪除table :
drop_table :people
- 變更欄位 :
change_column :table_name, :field_name, :integer, :limit => 8, :unsigned => true, :null => false, :auto_increment => true
- 增加欄位 :
add_column :table_name, :balance, :integer, default: 0, null: false, unsigned: true
- 刪除欄位 :
remove_column :table_name, :created_at
- rename欄位 :
rename_column :table_name, :id, :udid
- 增加索引 :
add_index :table_name, :email, unique: true
- 增加組合索引 :
add_index :user_views, [:user_id, :article_id]
- 執行SQL :
execute "ALTER TABLE users modify COLUMN id int(8) AUTO_INCREMENT"
筆記參考來源:http://blog.jex.tw/