Ruby on Rails チュートリアル をやってみた その9

前回「Ruby on Rails チュートリアル をやってみた その8 - IxD's blog」では第8章をやりましたが、今回は

railstutorial.jp

から始めていきます。

 

リスト9.34: ユーザーのindexビュー

説明を読んでみると、

リスト9.34では、7.7の演習のリスト7.31の結果を利用しています。これは、Gravatarヘルパーにデフォルト以外のサイズを指定するオプションを渡します。この演習をまだやっていない場合は、リスト7.31に従ってUsersヘルパーファイルを更新してから先に進んでください。

と書かれていますが、これまで演習では毎回、以下のことが書かれています。

演習とチュートリアル本編との食い違いを避ける方法については、演習用のトピックブランチに追加したメモ (3.6) を参照してください。 

しかし、7.7 演習には、以下のようにも書かれています。

(9.3.1でこれを改善したヘルパーを使います)

説明をきちんと読んでいれば問題はないのですが、この点を見落とすと

wrong number of arguments (2 for 1)

期待する引数の数(1)と実際の数(2)が違うというエラーが発生する原因となりますので注意が必要です。

 

9.6 演習

1. 基本的な考え方として、ヒントにあるようにsession[:forwarding_url]を使用することになりますが、どのタイミングで使用するか、また、どう使うか、というのが問題になります。まずは、

最初に与えられたURLにのみ確実に転送されていることを確認するテストを作成してください

ですので、store_locationがどのタイミングで実行されるか、ということを考えれば自ずと答えは導き出されると思います。次に、

続けてログインを行った後、転送先のURLはデフォルト (プロフィール画面) に戻る必要もありますので、これもテストで確認してください。

とありますが、redirect_back_orの処理がどうなっていたか、また、どのタイミングで実行されるのか、どう使われているか、ということがポイントです。

2. app/views/layouts/_header.html.erb がどうなっているかを確認し、他のテストも参考にしつつ取り組めば比較的簡単だと思います。

3. リスト9.59への穴埋め問題なので、基本的には問題ないかと思います。しかし、最後の 

assert_not @other_user.FILL_IN.admin?

 について、ここで期待されるテスト結果として、どうあって欲しいかが分かるかどうかと、それをどう持ってくるか、という点がポイントとなります。少し上に出てくる、

assert_not @other_user.admin?

だとpatchリクエストを行った後の結果とは言えませんので、どうすればリクエスト結果を反映したものになるのか、というのがヒントです。

4. リストの9.60, 9.61, 9.62があるので説明は割愛します。9.61について、非常に細かな点ですが、

<div class="col-md-6 col-md-offset-3"

となっていますが、正しくは

<div class="col-md-6 col-md-offset-3">

です。 

 

次回「Ruby on Rails チュートリアル をやってみた その10 - IxD's blog」は、

railstutorial.jp

をやっていきます。