cheatsheets/rails-migrations.md

123 lines
3.0 KiB
Markdown
Raw Permalink 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
category: Rails
---
### Automatically make migrations
$ rails generate migration RemovePartNumberFromProducts part_number:string
$ rails generate migration remove_part_number_from_products part_number # rails assumes string if not type given - and you can use snake_case
$ rails generate migration AddNameToWidgets name:string
$ rails g migration add_name_to_widgets name:string # you can use the short cut 'g' instead of generate - they both do the same thing
### Run migrations
$ rake db:migrate
### Creating tables
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
add_column :users, :first_name, :string
remove_column :users, :first_name, :string
change_column :users, :first_name, :text
change_column_default :users, :admin, nil
change_column_null :users, :email, false # adds NOT NULL constraint
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
### Auto-Add/remove columns
$ rails generate migration RemovePartNumberFromProducts part_number:string
### 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}
### In console
Use `ActiveRecord::Migration`.
ActiveRecord::Migration.add_index :posts, :slug
### References
* https://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index