はじめに
先日、「パーフェクトRuby on Rails」を買いました。
読み進めるにあたり、アウトプットをブログに書き記していこうと思います。
あまり肩肘はらず、学んだことの簡単なアウトプットを行っていきます。
第一章 Railsを始めるにあたって
Railsの設計思想
- CoC(Convention over Confiiguration)
設定より規約。規約に沿って書くことで多くの設定ファイルを書く手間が省け、他のエンジニアとコミュニケーションが取りやすくなる。
- DRY(Don't Repeat Yourself)
同じことを繰り返さない。
- REST(Representational State Transfer)
Webアプリケーションの設計思想の一つ。「全てのリソースに一意となる識別子(URI)がある。「URIを通してリソースを操作する手段を提供する」
- 自動テスト
メモ
bundleコマンドはgemパッケージを束ねるもの
# Gemfileのひな形を作成するコマンド $ bundle init
rails/info/routesでブラウザからルーティングを確認できる。
「(.:format)」は、アクセスしたURLの拡張子(.jsonや.csvなど)によってレスポンスを変化させるために利用する。
第二章 MVCアーキテクチャ
ActiveRecordの役割
(1)データベースと接続し、データベースのテーブルとActiveRecordのモデルを紐づける役割 (2)ビジネスロジックの実装的な機能を実行すること。バリデーションやコールバックなど。
CRUD操作
Create / Read / Update / Delete 操作の略称。
データベースのレコードに対する操作。Rが参照系、C,U,Dは更新系と言われる。
データベースのレコードを検索するメソッド例
# プライマリーキーで検索 find # 指定したカラムで検索 find_by # 複数のレコードを検索 where
ActiveRecord::Relationクラスについて
ActiveRecordのQuery Interfaceによる操作結果をオブジェクトとして表現したもの。 メソッド(メソッドチェインを含む)呼び出しを通じてActiveRecordRelationは内部でどのようなSQLを発行するか、という情報だけ保持する。
scope
良く利用する検索条件のクエリに名前をつけてひとまとめにしたもの。
・繰り返し利用するクエリの再利用性が上がる ・クエリに名前をつけることで、可読性が上がる
class Book < ApplicationRecord scope :costly, -> { where("price > ?", 3000) } end
デフォルトスコープという、検索処理を行う際、デフォルトで特定のscopeが適用された状態にすることも可能。 ただモデルクラスでの操作の全てに影響を与えるため注意が必要。
リレーション
has_one・・・1対1の関係を表す has_many・・・1対多を表す
じゃあ多対多の関係はどう構築する? →中間テーブルを作って、適切なアソシエーションを設定する。
class Book < ApplicationRecord has_many :authors, through: :book_authors end
class Author < ApplicationRecord has_many :books, through: :book_authors end
class BookAuthor < ApplicationRecord has_many :books has_many :authors end
バリデーション
アプリケーションレイヤーでの制御を通じてエラーを取扱やすくするためのもの。CB上での制約とは別
コールバック
レコードを作成保存する一連の流れの間の様々な箇所で任意の処理を差し込めるもの。
・前処理、後処理などを宣言的にかける
・必ず保存後に行いたい処理があるときに、実行漏れを防ぐことができる
基本的にロジックはモデルに書きあつめる。ビューとコントローラにはロジックは書かないようにする。
さいごに
簡単なメモ書き程度の記事です。ご了承ください!
引き続き、続きの章のアウトプットを行っていきたいと思います。
ではまた。