rails generate model Post user:string href:string description:text hash:string tag:string time:datetime
rails destroy model Post
rails generate migration add_<カラム名>_to_<テーブル名> <カラム名>:<データ型>
または
rails generate migration Add<カラム名>To<テーブル名> <カラム名>:<データ型>
(例)
rails g migration add_name_to_users name:string
rails generate migration remove_<カラム名>_to_<テーブル名> <カラム名>
rails generate migration remove_name_to_users name
rails generate migration change_datatype_<カラム名>_of_<テーブル名>
rails generate migration change_datatype_name_of_users
rails generate migration Rename<カラム名>To<テーブル名>
rename_column :<テーブル名>, :<カラム名>, :<変更後のカラム名>
rake db:migrate
rake db:migrate RAILS_ENV=production
rake db:migrate:status
rake db:version
rake db:rollback
rake db:rollback STEP=3
rake db:version
rake db:rollback VERSION=3
rake db:reset
rake db:migrate:reset
class CreateTest < ActiveRecord::Migration
def change
create_table :tests do |t|
t.integer :status, limit: 1
end
end
end
TINYINT | 1 |
SMALLINT | 2 |
MEDIUMINT | 3 |
INT | 4〜6 |
BIGINT | 5〜8 |
Migration | MySQL | Ruby |
---|---|---|
integer | int(11) | Fixnum |
decimal | decimal(10,0) | BigDecimal |
float | float | Float |
string | varchar(255) | String |
text | text | String |
binary | blob | String |
date | date | Date |
datetime | datetime | Time |
timestamp | datetime | Time |
time | time | Time |
boolean | tinyint(1) | TrueClass/FalseClass |
(例)
Customer -> Order -> Item
青文字は Customer から Item を参照するために設定
背景黄色は Item から Customer を参照するために追加設定
Customer
class Customer < ActiveRecord::Base
has_many :orders // Customer => Item
has_many :items, through: :orders // Customer => Item
scope :has_item_id, -> item_id { // Item => Customer
joins(:items).where('items.id = ?', item_id) // Item => Customer
}
end
Order
class Order < ActiveRecord::Base
belongs_to :customer // Customer => Item
belongs_to :item // Customer => Item
end
Item
class Item < ActiveRecord::Base
has_many :orders // Customer => Item
has_many :customers, through: :orders // Customer => Item
delegate :customer, to: :order // Item => Customer
end
mkdir lib/validates
config.autoload_paths << Rails.root.join('lib', 'validates')
class HakakuValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value.to_s =~ /^[ -~]*$/
record.errors[attribute] << "は半角文字で入力してください。"
end
end
end
モデルクラスでバリデーターを適用。クラス名の 1文字目を小文字にして、Validator は付けない。2つ目の大文字はアンダースコアで区切って小文字にする。
validates :name, hankaku: true
class ItemValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
validator = HogeValidator.new(options.merge(attributes: :name))
validator.validate_each(record, attribute, value.to_s)
end
end
validates :address, unless: Proc.new{ |a| a.name.blank? }