akitoshiblog

よわよわエンジニアの日々の思考と学びの記録。

【パーフェクトRuby on Rails】第一,二章アウトプット

はじめに

f:id:maserati004:20200913232157j:plain
パーフェクトRuby on Rails

先日、「パーフェクト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上での制約とは別

コールバック

レコードを作成保存する一連の流れの間の様々な箇所で任意の処理を差し込めるもの。

・前処理、後処理などを宣言的にかける

・必ず保存後に行いたい処理があるときに、実行漏れを防ぐことができる

基本的にロジックはモデルに書きあつめる。ビューとコントローラにはロジックは書かないようにする。

さいごに

簡単なメモ書き程度の記事です。ご了承ください!

引き続き、続きの章のアウトプットを行っていきたいと思います。

ではまた。