Ruby
Rails
RubyOnRails
Railsチュートリアル

Ruby on Rails チュートリアル 5.0(第4版) 第3章 演習と解答まとめ

Ruby on Rails チュートリアル 5.0(第4版)を学習中です。
演習問題を自分なりに実施しました。
もし間違い等あればコメントいただけると嬉しいです。

演習3.1

演習3.1.1

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

<解答>
sample_app_overview.png

演習3.1.2

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

<解答>
動作確認なので省略

演習3.2.1

演習3.2.1.1

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

<解答>

$ rails g controller Foo bar baz

上記のコマンドで以下が生成されます。

foo_controller.rb
class FooController < ApplicationController
  def bar
  end

  def baz
  end
end
routes.rb
Rails.application.routes.draw do
  get 'foo/bar'
  get 'foo/baz'
(中略)
end

演習3.2.1.2

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

$ rails d controller Foo bar baz

演習3.4.2

演習3.4.2.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.4.3

演習3.4.3.1

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

static_pages_controller_test.rb
require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest

(中略)

  test "should get contact" do
    get static_pages_contact_url
    assert_response :success
    assert_select "title", "Contact | Ruby on Rails Tutorial Sample App"
  end
end

ルーティング記載。

routes.rb
Rails.application.routes.draw do

(中略)

  get  'static_pages/contact'
end

コントローラーに"contact"アクション追加。

static_pages_controller.rb
class StaticPagesController < ApplicationController

(中略)

  def contact
  end
end

Contactページ編集。

static_pages/contact.html.erb
<% provide(:title, 'Contact') %>
<h1>Contact</h1>
<p>
  Contact the Ruby on Rails Tutorial about the sample app at the
  <a href="http://railstutorial.jp/contact">contact page</a>.
</p>

演習3.4.4

演習3.4.4.1

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

<解答>

static_pages_controller_test.rb
require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest

  def setup
    @base_title="Ruby on Rails Tutorial Sample App"
  end

  test "should get root" do
    get root_url
    assert_response :success
  end
(中略)
end

演習3.4.4.2

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

<解答>
動作確認なので省略。

関連記事

Ruby on Rails チュートリアル 完全攻略 概要と演習解答総まとめ
http://mochikichi.hatenablog.com/entry/rails_tutorial_guide