Coding - 碼農筆記 / ruby & rails / 常用筆記

Rails筆記-2

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/

© 2024 胡同筆記 | WordPress Theme: Cosimo by CrestaProject.