rails generate model Post user:string href:string description:text hash:string tag:string time:datetimerails destroy model Postrails 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 namerails generate migration change_datatype_<カラム名>_of_<テーブル名>rails generate migration change_datatype_name_of_usersrails generate migration Rename<カラム名>To<テーブル名>rename_column :<テーブル名>, :<カラム名>, :<変更後のカラム名>rake db:migraterake db:migrate RAILS_ENV=productionrake db:migrate:statusrake db:versionrake db:rollbackrake db:rollback STEP=3rake db:versionrake db:rollback VERSION=3rake db:resetrake db:migrate:resetclass 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/validatesconfig.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? }