【Railsチュートリアル】第3章 演習問題解答

【Railsチュートリアル】第3章 演習問題解答
目次

3.1 セットアップ

1.BitbucketがMarkdown記法のREADME (リスト 3.3) をHTMLとして正しく描画しているか、確認してみてください。

解答

ご自身のbitbucketにアクセスして確かめてみてください。

Markdown記法についてはこちらが参考になると思います。
https://qiita.com/tbpgr/items/989c6badefff69377da7

2.本番環境 (Heroku) のルートURLにアクセスして、デプロイが成功したかどうか確かめてみてください。

解答

hello, world!が表示されていればOKです。

3.2 静的ページ

1.Fooというコントローラを生成し、その中にbarとbazアクションを追加してみてください。

解答

rails generate controller Foo bar baz実行

2.コラム 3.1で紹介したテクニックを駆使して、Fooコントローラとそれに関連するアクションを削除してみてください。

解答

rails destroy controller Foo bar baz実行

3.4.2 タイトルを追加する (Green)

1.StaticPagesコントローラのテスト (リスト 3.24) には、いくつか繰り返しがあったことにお気づきでしょうか? 特に「Ruby on Rails Tutorial Sample App」という基本タイトルは、各テストで毎回同じ内容を書いてしまっています。そこで、setupという特別なメソッド (各テストが実行される直前で実行されるメソッド) を使って、この問題を解決したいと思います。まずは、リスト 3.30のテストが green になることを確認してみてください (リスト 3.30では、2.2.2で少し触れたインスタンス変数や文字列の式展開というテクニックを使っています。それぞれ4.4.5と4.2.2で詳しく解説するので、今はわからなくても問題ありません)。

解答

リスト3.30と同じように修正してrails testを実行し、
GREENであればOKです。

3.4.3 レイアウトと埋め込みRuby (Refactor)

1.サンプルアプリケーションにContact (問い合わせ先) ページを作成してください16 (ヒント: まずはリスト 3.15を参考にして、/static_pages/contactというURLのページに「Contact | Ruby on Rails Tutorial Sample App」というタイトルが存在するかどうかを確認するテストを最初に作成しましょう。次に、3.3.3でAboutページを作ったときのと同じように、Contactページにもリスト 3.40のコンテンツを表示してみましょう。)。

解答

まず、テストを作成します。
以下のコードを追加します。

#list 3.15
 test "should get contact" do
  get static_pages_contact_url
  assert_response :success
  assert_select "title","Contact | #{@base_title}"
end

ルーティングを設定します。
以下のコードを追加します。

get 'static_pages/contact'

そしてコントローラのアクションを設定します。

def contact
end

ビューを作成します。
リスト3.40のソースコードをコピーで大丈夫ですのでソースは割愛。

最後にrails testで確認してください。
エラーがなければOKです。

※補足
ルーティングの[Prefix+_url]がヘルパーとして使えるようになります。
rails routesコマンドを実行することでPrefixを確認できます。

$rails routes
              Prefix Verb URI Pattern                     Controller#Action
   static_pages_home GET  /static_pages/home(.:format)    static_pages#home
   static_pages_help GET  /static_pages/help(.:format)    static_pages#help
  static_pages_about GET  /static_pages/about(.:format)   static_pages#about
static_pages_contact GET  /static_pages/contact(.:format) static_pages#contact
                root GET  /                               static_pages#home

この場合は

  • static_pages_home_url
  • static_pages_help_url
  • static_pages_about_url
  • static_pages_contect_url
  • root_url

の5つがヘルパーとして使うことができます。

3.4.4 ルーティングの設定

1.リスト 3.41にrootルーティングを追加したことで、root_urlというRailsヘルパーが使えるようになりました (以前、static_pages_home_urlが使えるようになったときと同じです)。リスト 3.42のFILL_INと記された部分を置き換えて、rootルーティングのテストを書いてみてください。

解答

リスト3.42を以下のように修正します。

  test "should get root" do
    get root_url
    assert_response :success
  end

1つ目はroot_url,2つ目は:success

リスト3.41を正しくできていればrails testをパスするはずです。

2.実はリスト 3.41のコードを書いていたので、先ほどの課題のテストは既に green になっているはずです。このような場合、テストを変更する前から成功していたのか、変更した後に成功するようになったのか、判断が難しいです。リスト 3.41のコードがテスト結果に影響を与えていることを確認するため、リスト 3.43のようにrootルーティングをコメントアウトして見て、 red になるかどうか確かめてみましょう (なおRubyのコメント機能については4.2.1で説明します)。最後に、コメントアウトした箇所を元に戻し (すなわちリスト 3.41に戻し)、テストが green になることを確認してみましょう。

解答

指示通り実行するだけなので省略。

以上


Railsチュートリアルカテゴリの最新記事