Railsガイド「Rails をはじめよう」の読み直しをしたときの学習ノートです。
正確に覚えたい用語、自分が忘れていたところ、また確認するように思われる部分を簡単にメモしています。
教材としてもとても優れていると感じたので、Rails初学者の方にはRailsガイド「Rails をはじめよう」はおすすめです。
Railsとは
プログラミング言語RubyでかかれたWebアプリケーションフレームワーク。
フレームワーク
システム開発が楽にできるよう作られているプログラムの雛形。
フレームワークとは 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
「ジェネレータ」というスクリプトが多数付属していて、必要なものを自動的に生成してくれる。
スクリプト
スクリプト言語は簡易的なプログラミング言語の一つ。
スクリプロ言語で書かれたプログラムをスクリプトという。
書くとすぐ実行できる。
新規アプリケーション作成用のジェネレータは以下。
% rails new <アプリ名>
ルーティング
RubyのDSL(Domain-Specific Language) で記述されたルール。
コントローラ
Rubyのクラス。
コントローラークラスのpublicメソッドがアクション。
ビュー はテンプレート。
オートロード
app/
ディレクトリ配下で何かを読み込むためにrequireはかかない。
参照:『定数の自動読み込みと再読み込み』
【requireを書く必要があるケース】
lib/
ディレクトリの下にあるファイルを読み込むGemfile
でrequire: false
が指定されているgem依存を読み込む
lib/
lib/ アプリケーションで使う拡張モジュールが置かれているところ。
MVC(Model-View-Controller)
アプリの責務を分割して理解しやすくするデザインパターン。
「ルーティング」「コントローラ」「アクション」「ビュー」はMVCに沿ったWebアプリの典型的な構成要素。
モデル(model)
データを表現するためのRubyクラス。
モデル名は常に英語の「単数形」で表記する。
インスタンス化されたモデルは1件のデータレコードを表すから。
コンストラクタ
インスタンス作成時に実行されるメソッド。
コンストラクタ 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
モデルを定義するには、以下のようにモデル用のジェネレータを実行する。
% bin/rails generate model <モデル名 単数形> title:string body:text
Active Record
Railsの機能。
モデルは、Active Recordを介して、データベースとやりとりをおこなう。
マイグレーション(migration)
アプリケーションのデータベース構造を変更するときに使われる機能。
Rubyコードで記述するため、データベースの種類を問わずマイグレーションを実行できる。
以下のコマンドでマイグレーションを実行できる。
% bin/rails db:migrate
上記のコマンドでデータベース上にテーブルが作成される。
マイグレーションにより、モデルを介してテーブルとのやりとりができるようになる。
Railsコンソール
起動するコマンド。
$ bin/rails console
コンソールでの操作はsave
メソッドを呼び出さな限りデータベースに保存されることはない。
データベースからの取り出し
対象データを取り出したいときは、そのモデルでfind
メソッドを呼び出し、そのObjectのid
を引数として渡す。
コントローラ内のインスタンス変数(@
で始まる変数)は、ビューからも参照可能。
例) app/views/articles/index.html.erb
で@articles
と書く
→このインスタンス変数を参照できる。
【2種類のERBタグ】
<% %>
タグ: 「この中のRubyコードを評価する」という意味。
<%= %>
タグ :「この中のRubyコードを評価し、返された値を出力する」という意味。
ERBタグの中には、通常のRubyプログラムで書けるコードなら何でも書ける。
パスとパラメータ ルーティングパラメータは、リクエストのパスに含まれる特定の値をキャプチャし、paramsというハッシュに保存する。
paramsはコントローラのアクションでもアクセスできる。
例)GET http://localhost:3000/articles/1というリクエスト
:id
で1
がキャプチャされる
→ArticlesControllerのshowアクションでparams[:id]と書くとアクセス可能
CRUD追加の流れ
ルーティングを追加する
コントローラにアクションを追加する
ビューを追加する
ルーティングresources
Railsのルーティングメソッド。
リソースのコレクション(collection: 集まり)を対応付けるのによく使われるルーティングをすべて対応付ける。
以下のコマンドでルーティングがどのように対応付けられているかを表示させることができる。
% bin/rails routes
resourcesメソッドには2つのタイプがある。
_url
で終わる「URL」ヘルパーメソッド
_path
で終わる「パス」ヘルパーメソッド
パスヘルパーを使うことでコードが特定のルーティング設定に依存することを回避できる。
カラムの値の末尾には、パスヘルパーによって_url
や_path
といったサフィックス(接尾辞)が追加される。
article_path
ヘルパーが返却するパス "/articles/#{article.id}"
パスヘルパーで、app/views/articles/index.html.erb
のリンクを簡潔な形に書き直せる。
プレフィックス 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
サフィックス 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
views link_to
リンク設定のヘルパー。
ヘルパーメソッド
ビューテンプレートの開発に役立つメソッド。
第1引数はリンクテキスト、第2引数はリンク先。
第2引数にモデルオブジェクトを渡すと、link_to
が適切なパスヘルパーを呼び出してオブジェクトをパスに変換する。
例) link_to
<テキスト> <article> → article_path
new とaction
newアクション
新しい記事を1件インスタンス化する。データベースには保存しない。
ビューでフォームをビルドするときに使用される。
newアクションを実行すると、app/views/xxxxxxx/new.html.erb
がレンダリングされる。
createアクション
タイトルと本文を持つ新しい記事をインスタンス化し、データベースへの保存を試行。
ビルド 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
レンダリング 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
リダイレクト
createアクション実行後はリダイレクトが行われる。
redirect_toメソッドを使うとブラウザで新しいリクエストが発生する。
renderメソッドは指定のビューを現在のリクエストとしてレンダリングする。
redirect_toメソッドではステートが変更される前に呼び出すと、ユーザーがブラウザをリロードしたときに同じリクエストが再送信され、変更が重複してしまうので注意。
フォームビルダー(form builder)
最小限のコードを書くだけで設定がすべてできあがったフォームを表示できる機能。
送信されたフォームのデータはparamsハッシュに保存され、ルーティングパラメータも同様にキャプチャされる。
例)createアクションの場合
params[:article][:title]
送信された記事タイトルにアクセス
params[:article][:body]
を用いると送信された記事本文にアクセス
Strong Parameters
paramsのフィルタリング。
モデルの重要な属性を不必要に更新することを防止するためのセキュリティ対策。
バリデーション(validation: 検証)
無効なユーザー入力を処理するための機能。
モデルオブジェクトを保存する前に自動的にチェックするルール。
対象となるモデルに追加する。
Active Recordは、テーブルのあらゆるカラムごとにモデル属性を自動的に定義するので、モデルファイル内でこれらの属性を宣言する必要はない。
newアクションはインスタンス変数を保存しないので、この時点ではバリデーションは実行されず、エラーメッセージも表示されない。
フォームを送信すると、POSTリクエストはcreateアクションに対応付けられる。
createアクションはインスタンス変数を保存しようとするので、バリデーションが実行される。
バリデーションのいずれかが失敗すると、インスタンス変数は保存されず、レンダリングされた/new.html.erb
にエラーメッセージが表示される。
editとupdate
更新のステップは、コントローラのeditアクションとupdateアクションで扱うのが慣例。
newアクションとcreateアクションに近い。
editアクション データベースから対象データを取得してインスタンス変数に保存し、フォームを作成するときに使えるようにする。 デフォルトでapp/views/articles/edit.html.erb
をレンダリング。
updateアクション
データベースから対象データを(再)取得し、 article_paramsでフィルタリングされた送信済みのフォームデータで更新を試みる。
Railsのフォームビルダーとリソースフルルーティングのおかげで、editで使うフォームの表示は、newで使うフォームの表示とコードは同一になる。
フォームビルダーは、機能として
モデルオブジェクトが既に保存されている場合→edit用のフォーム
モデルオブジェクトが保存されていない場合→new用のフォーム
を自動的に構成するので、状況に応じて適切なリクエストを行える。
同一の部分は共有できる。
パーシャル(partial: 部分テンプレート)
共有ビュー。
ファイル名は冒頭にアンダースコア_を必ずつける。
レンダリングでパーシャルを参照するときはアンダースコアを付けない。
パーシャルのコードは共有されるので、特定のインスタンス変数に依存しないようにローカル変数にする。
destroyアクション
リソースの削除 必要となるのは削除用のルーティングとコントローラのアクションだけ。
ルーティング:
DELETE /articles/:id
リクエストをコントローラの destroyアクションに対応付ける。
アクション:
データベースから記事を取得してdestroy
メソッドを呼び出し、ブラウザをリダイレクトさせる。