- ActiveRecordの概要
- ActiveRecordとは?
- 「設定より規約」
- コードで紹介
- Modelの作り方
- CRUC操作
- Validations
- Migrations
Martin Fowler氏 が定義した
Active Record Pattern に由来します
MVCパターンの Model を担当するもので
Rails にて O/Rマッパー として利用されてるのは有名ですね
An object that wraps a row in a database table or view,
capsulates the database access, and adds domain logic on that data.
--
データベースのテーブルあるいはビューの row が
1つのクラスにラップされ
オブジェクトのインスタンスがデータベースの1行に結合される
DBアクセスをカプセル化し、
ドメインロジックも追加できる
--
Modelやそのデータを表すこと
Model間のリレーションを表すこと
関係するモデルの継承関係を表すこと
DBに永続化する前にModelをバリデーションすること
オブジェクト指向っぽくDB操作すること
画像の参考:[Active Record Associations — Ruby on Rails Guides](http://guides.rubyonrails.org/association_basics.html)
名前の規約
Orderクラスは orders
テーブル
スキーマの規約
外部キーは table_name_id
主キーはデフォルトで id
等
コードで理解していきましょう! :)
サンプルコード用意しました
$ ce /path/to/workspace
$ git clone https://github.com/luckypool/activerecord-example.git
$ cd activerecord-example
$ bundle install
$ rake db:migrate
$ bundle exec ruby crud.rb
users
テーブルがあったとして、
CREATE TABLE users (
id int(11) NOT NULL auto_increment,
name varchar(255),
PRIMARY KEY (id)
);
これに対応する Model の作り方はとても簡単
# models/user.rb
class User < ActiveRecord::Base
end
user = User.create(name: "David")
or
user = User.new
user.name = "David"
user.save
or
user = User.new do |u|
u.name = "David"
end
user.save
means
INSERT INTO users (name) VALUES ("David");
全件取得
users = User.all
means
SELECT * FROM users
1件取得
users = User.find_by(id: 1)
means
SELECT * FROM users WHERE id = 1 LIMIT 1
user = User.find_by(id: 1)
user.name = 'Dave'
user.save
or
user = User.find_by(id: 1)
user.update(name: 'Dave')
means
UPDATE users SET name = 'Dave' WHERE id = 1
user = User.find_by(id: 1)
user.destroy
means
DELETE FROM users WHERE id = 1
# models/user.rb
class User < ActiveRecord::Base
validates :name, presence: true
end
User.create # => false
User.create! # => ActiveRecord::RecordInvalid: Validation failed: Name can't be blank
Active Record Validations — Ruby on Rails Guides
Active Record Callbacks — Ruby on Rails Guides
# db/migrate/20140411074321_create_users.rb
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.timestamps
end
end
end
CREATE TABLE "users" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name" varchar(255),
"created_at" datetime,
"updated_at" datetime
);
- ActiveRecordの概要
- ActiveRecordとは?
- 「設定より規約」
- 簡単チュートリアル
- Modelの作り方
- CRUC操作
- Validations
- Migrations
おわり
--