開始81日目〜超初心者、文系、30代のスタート〜
本日学んだこと:
統合テスト:
フィーチャスペックは、Rspecを使って統合テストを行うためのスペックです。テスト環境用の仮想ブラウザを操作して、「特定のa要素をクリックする」「ボタンと対応するコントローラのアクションが動く」といった複雑なテストを書くことができます。
Capybaraは、ブラウザの操作を再現するのに必要なgemです。特定の要素をクリックしたり、フォームに値を入力したり、特定の要素が画面に表示されているかなど、様々なブラウザ上の動きをテストすることができます。
visitメソッドは引数にURL、 もしくはプレフィックスを指定することで、そのページに移動することができるメソッドです。
click_onメソッドは、指定したHTML要素をクリックするメソッドです。
※visitメソッドとclick_onメソッドは特によく使用する
Ruby on Railsで作成したアプリケーションの中でJavaScript/jQueryを使用する:
非同期通信(Ajax)
リクエスト後にレスポンスが帰ってきた際、ブラウザが再読み込みされること無く通信が行われる通信方法です。非同期通信は英語で"Asynchronous JavaScript + XML"と表現され、略してAjax(エイジャックス)と呼ばれます。Ajaxという表現は今後も頻繁に用いるので覚えておきましょう。
Java Script Object Notationの略で、データ交換を行うためのデータ記述形式の一種です。Rubyのハッシュと同様、キーとバリューの組み合わせでデータを表現する形式です。
respond_to というメソッドは、「リクエストがHTMLのレスポンス求めているのか、それともJSONのレスポンス求めているのか」を条件に条件分岐してくれます。
FormData
フォームのデータの送信に使用することができます。
必要なクラス名とIDを与える
後のajaxの非同期通信を実装するために、事前にコメントのフォームにクラス名を与える。
コメント機能実装のステップ
- jQueryを記述するためのファイルを作成する
- フォームが送信されたら、イベントが発火するようにする
- 非同期通信でコメントが保存されるようにする
- respond_toを使用してHTMLとJSONの場合で処理を分ける
- jbuilderを使用して、作成したメッセージをJSON形式で返す
- 返ってきたJSONをdoneメソッドで受取り、HTMLを作成する
- エラー時の処理を行う
attrメソッド
要素が持つ指定属性の値を返します。
要素が指定属性を持っていない場合、関数はundefinedを返します。
processDataオプション
デフォルトではtrueになっており、dataに指定したオブジェクトをクエリ文字列(例: msg.txt?b1=%E3%81%8B&b2=%E3%81%8D )に変換する役割があります。
クエリ文字列とは、WebブラウザなどがWebサーバに送信するデータをURLの末尾に特定の形式で表記したものの事です。
contentTypeオプション
サーバにデータのファイル形式を伝えるヘッダです。こちらはデフォルトでは「text/xml」でコンテンツタイプをXMLとして返してきます。
rails newコマンドでアプリケーションを作成した際にgemfileにデフォルトで記述されているgemで、入力データをJSON形式で出力するテンプレートエンジン
テンプレートリテラル記法
ダブルクオートやシングルクオートの代わりにバックティック文字で囲むことで、複数行文字列や文字列内挿入機能を使用できます。(shift+@)
インデックスでデータの検索を高速化
→データベースの機能の一つで、テーブル内のデータ検索を高速化することができる。
インデックスを貼るという。
2つのデメリット。
- データを保存・更新する速度が遅くなる
- データベースの容量を使う
jbuilder:array! メソッド
jbuilderという拡張子を持つテンプレートでは、JSONという名前のJbuilderオブジェクトが自動的に利用できるようになります。
Jbuilderオブジェクトは、JSON形式に返すための便利なメソッドがたくさん用意されており、配列で返したい場合はarray!を使用します。
array!を使用することで、JavaScript側に配列で値を送ることが可能です。
forEach メソッド
forEachは、与えられた関数を配列に含まれる各要素に対して一度ずつ呼び出します。
明日やること:
補足カリキュラムを完了する。
感想:
大河内さんと終わった後話した。
カリキュラムを進めることも大事だが、しっかり身に着けることを第一に勉強に時間を割く必要がある。