Railsについてのメモ
-
ヘルパー内のメソッドについて、railsでは自動的にヘルパーモジュールを読み込むので、include行を書く必要がなく、ヘルパーモジュール内のメソッドは自動的にすべてviewで利用できる。ただしヘルパーをコントローラーで呼び出したいときは、includeで明示的に記述する必要がある。
-
モデルのカラムで検索対象とするものにはインデックスを追加する。インデックスは検索時に全件検索を防ぐために用いる、本でいうところの索引のようなもの。rails generate でインデックスを追加する。
-
Q:なぜ記憶トークンの生成にbase64を採用したか?
A:base64ではトークンの一意性が現実的に担保されるから。base64では64種の長さ22のランダム文字列が生成され、衝突確率は10^(-40)。これは1秒間に100万個のトークンを宇宙の年齢分生成しても衝突確率が2×10(-23)以下で、実質ゼロと言える。 -
あるメソッドがオブジェクトのインスタンスを必要としない場合は、クラスメソッドにするのがよい。
-
セッションを実装する方法として一般的なのがcookiesを使う方法で、Railsではsessionメソッドを使って一時セッションを作成し、cookiesメソッドを使ってブラウザを再起動したときにも継続するセッションを作れる。(言葉がややこしい)
-
rails generate controller コントローラー名 アクション名
rails generate model モデル名 カラム名
rails generate migration add_XXXXXXX_to_XXXX
rails destroy ~~ -
(7.3.3)エラーメッセージ
ログイン失敗時にはエラーメッセージを表示する。errors.full_messagesオブジェクトはエラーメッセージの配列を持っている。これをブラウザで表示するときは、newページでエラーメッセージのパーシャルを出力する。パーシャル内でeachで繰り返し処理を行う。pluralizeという英語専用のテキストヘルパーを使用すると、単数形を複数形に変更してくれる。エラーメッセージをカウントして引数とする。
>> user.error.full_messages
>> helper.pluralize(3,"woman")
=> 3 women
- (7.2.1)form_withヘルパーメソッド
ユーザー登録ページで重要な要素。form_withヘルパーメソッドを使って、ユーザー登録に不可欠な情報を入力するフォーム。引数には例えばユーザーオブジェクトなどを入れる。
(8.1.2)セッションの場合は、form_withの引数にURLとスコープを指定する。
form_with(url: login_path, scope: :session)
(8.1.2) フォーム送信後にparamsハッシュに入る値がそれぞれ推測できると思います。。。→paramsハッシュって何だっけ?何に利用されているんだっけ?
ログイン時にparamsハッシュの中身の値を使用する!セッション生成時にも使用する。
- authenticateメソッド
引数にはパスワードの平文を渡す。メソッドがハッシュ化したパスワードとデータベースのハッシュ化済みパスワードを比較する。返り値は、user.authenticate()であればユーザーオブジェクトを返す。重要なのは、返り値の論理値がtrueであること。!!で論理値オブジェクト変換するとtrueが出る。
統合テストの使いどころってどんな考え方だっけ?
→ユーザーがWebブラウザでアプリケーションとやり取りする操作をシミュレートしたいときに活用できる。統合テストは、モデル/ビュー/コントローラにまたがる機能テストを書く。
例)ブラウザを立ち上げてルートURLにアクセスし、それぞれのリンクをクリックして確かめたいとき、など。→詳しくは5.3.4 リンクのテストを参照。
gitについてのメモ
- git revertでコミットを戻そうとしたら失敗した。ワークツリーにコミットしていないファイルがあったから。rails generate でモデルにカラム追加もしてたから、rollbackでバージョン元に戻して、マイグレーションファイル削除してワークツリー上を空にしたらうまくいったっぽい。
コマンドラインについてのメモ
- rails routes の検索結果をgrepを使うことで検索し表示できる。下記のように使う。ターミナルのパイプ機能を使用している。
$ rails routes | grep sessions login GET /login(.:format) sessions#new POST /login(.:format) sessions#create logout DELETE /logout(.:format) sessions#destroy