cheatsheets/rails-migrations.md

115 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Rails migrations
layout: default
---
### Automatically make migrations
$ rails generate migration RemovePartNumberFromProducts part_number:string
$ rails generate migration AddNameToWidgets name:string
### Run migrations
$ rake db:migrate
### Migrations
create_table :users do |t|
t.string :name
t.text :description
t.primary_key :id
t.string :title
t.text :description
t.integer :games_count
t.float :lol
t.decimal :price
t.decimal :price, :precision => 2, :scale => 10
t.datetime :expiration
t.timestamp :time_in
t.time :time_in
t.date :expiry
t.binary :image_data
t.boolean :is_admin
end
# Options:
:null (boolean)
:limit (integer)
:default
### Operations
create_table
change_table
drop_table
add_column
change_column
rename_column
remove_column
add_index
remove_index
### Use models
class AddFlagToProduct < ActiveRecord::Migration
class Product < ActiveRecord::Base
end
def change
add_column :products, :flag, :boolean
Product.reset_column_information
reversible do |dir|
dir.up { Product.update_all flag: false }
end
end
end
### Associations
t.references :category # kinda same as t.integer :category_id
# Can have different types
t.references :category, polymorphic: true
### Add/remove columns
$ rails generate migration RemovePartNumberFromProducts part_number:string
class RemovePartNumberFromProducts < ActiveRecord::Migration
def up
remove_column :products, :part_number
end
def down
add_column :products, :part_number, :string
end
end
### Indices
# Simple
add_index :suppliers, :name
# Unique
add_index :accounts, [:branch_id, :party_id], :unique => true
# Named (:name => ...)
add_index :accounts, [:branch_id, :party_id], :unique => true, :name => "by_branch_party"
# Length
add_index :accounts, :name, :name => by_name, :length => 10
add_index :accounts, [:name, :surname], :name => by_name_surname,
:length => {
:name => 10,
:surname => 15
}
# Sort order (no MySQL support)
add_index :accounts, [:branch_id, :party_id, :surname],
:order => {:branch_id => :desc, :part_id => :asc}
### References
* http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index