心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。5.3章。

   


5.3レイアウトのリンク、です。

AboutはRailsらしくない、とおっしゃってます。確かに。でもURLってどう記号化するよ?と思ったら、そうだ、

名前付きルート

だそうです。rake routesやって出てくるあれです。
URLに名前がついているんですね。

<%= link_to "About", about_path %>
と書けます。

rake routesやってみる

現段階でrake routesやってみます。

Prefix Verb URI Pattern Controller#Action
static_pages_contact GET /static_pages/contact(.:format) static_pages#contact
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

あんまりキレイじゃないですね。

routes.rbの中身はこうですから当然です。

Twili::Application.routes.draw do
  get "static_pages/contact"
  get "static_pages/home"
  get "static_pages/help"
  get "static_pages/about"
end

最終的には
表 5.1サイトリンクのルート (routing) とURLのマッピング。

ページ URL 名前付きルート
Home / root_path
About /about about_path
Help /help help_path
Contact /contact contact_path
Sign up /signup signup_path
Sign in /signin signin_path

とするそうです。static_pages/homeがrootになるんだな、ってなんとなくわかりますね。

リスト5.17 Contactページのテスト。
リスト5.18 Contactページ用のルートを追加する。
リスト5.19 Contactページ用のアクションを追加する。
リスト5.20 Contactページのビュー。
は3章の演習でやったので飛ばします。

viewを色々いじりましたが、仕様としては変わっていないはずなので、テストは通るはず。

bundle exec rspec spec/requests/static_pages_spec.rb

9 examples, 0 failuresでした。

ルートのテストを書く

ルートの仕様がわかったところで、まずテストから書きます。TDD徹底していますね。RailsTutorialのいいところです。

テストコードで、パスを 名前付きルートに書き換えます。
homeはトップページになる予定なので、名前付きルートは、’root_path’、それ以外のページは表 5.1のように書き換えます。

visit ‘/static_pages/home’ が、visit root_pathに
visit ‘/static_pages/help’ が、visit help_pathになる感じですね。
リスト5.21 名前付きルートのテスト。
spec/requests/static_pages_spec.rb

require 'spec_helper'

describe "静的ページのテスト" do
  let(:base_title) { "Ruby on Rails Tutorial Sample App" }

  describe "Homeページのテスト" do
    it "コンテンツに'Twili'という文字がある" do
      visit root_path
      expect(page).to have_content('Twili')
    end
    it "トップページのタイトル(サブタイトルがない)" do
      visit root_path
      expect(page).to have_title("#{base_title} ")
    end 
    it "カスタマイズしたページのタイトル(タイトルにHomeがない)" do
      visit root_path
      expect(page).not_to have_title('| Home')
    end 
  end

  describe "Helpページのテスト" do
    it "コンテンツに'Help'という文字がある" do
      visit help_path
      expect(page).to have_content('Help')
    end
    it "タイトルに'Help'という文字がある" do
      visit help_path
      expect(page).to have_title("#{base_title} | Help")
    end
  end

  describe "Aboutページのテスト" do
    it "コンテンツに'About Us'という文字がある" do 
      visit about_path
      expect(page).to have_content('About Us')
    end
    it "タイトルに'About Us'という文字がある" do
      visit about_path
      expect(page).to have_title("#{base_title} | About Us")
    end
  end

  describe "Contactページのテスト" do
    it "コンテンツに'Contact'という文字がある" do 
      visit contact_path
      expect(page).to have_content('Contact')
    end
    it "タイトルに'Contact'という文字がある" do
      visit contact_path
      expect(page).to have_title("#{base_title} | Contact")
    end
  end
end

名前付きルートはまだ設定できていないので、テスト実行すると、

bundle exec rspec spec/requests/static_pages_spec.rb

9 examples, 9 failuresです。

名前付きルートを実装する

5.3.2 Railsのルートです。Railsの好きなところ、ってルーティングをデザインできるところです。
テストを書いて失敗したところで、仕様どおりのルーてイングを実装します。

リスト5.24 ルート (root) へのルーティングのためのマッピングを追加する。
config/routes.rb

Twili::Application.routes.draw do
  root  'static_pages#home'
  match '/help',    to: 'static_pages#help',    via: 'get'
  match '/about',   to: 'static_pages#about',   via: 'get'
  match '/contact', to: 'static_pages#contact', via: 'get'
end

homeページがルート、それいがいは/ページ名でよばれるようになりました。
リソースは/static_pages/にあるのに、素敵です。これでアクセス時は/static_pagesいらなくなりました。

テスト実行すると、

bundle exec rspec spec/requests/static_pages_spec.rb

9 examples, 0 failuresになりました。

rake routesすると、

Prefix Verb URI Pattern Controller#Action
root GET / static_pages#home
help GET /help(.:format) static_pages#help
about GET /about(.:format) static_pages#about
contact GET /contact(.:format) static_pages#contact

ルートが仕様通りになっているのはわかるのですが、名前付きルートはでていませんね。

http://localhost:3000/aaa とか、ありえないURLでアクセスしたエラーページにガイダンスがでています。

Helper HTTP Verb Path Controller#Action
Path / Url
root_path GET / static_pages#home
help_path GET /help(.:format) static_pages#help
about_path GET /about(.:format) static_pages#about
contact_path GET /contact(.:format) static_pages#contact

これ、ターミナルで見る方法ないんだろうか。

さて、
次は5.3.3名前付きルートですが、これはviewを直して、テストを5.6でやるという、TDDから逸脱をしているので、5.3.3は5.6をやった後にまわします。

ここでいったんコミットします。
次は、
5.3.4RSpecを洗練させる
です。

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

no image
RailsTutorial4.0を高速で復習する。3.3.4章。

3.3.4レイアウトを使って重複を解消する、です。 ここでapplication …

RailsTutorial4.0を高速で復習する。9章。

8章で随分おなかいっぱいになりました。 第9章 ユーザーの更新・表示・削除、です …

no image
@で始まるのが インスタンス変数

@ で始まるのが インスタンス変数 大文字で始まるのが 定数 文法書のどこに書い …

実機なしでRetina 3.5インチのスクリーンショットを撮る

iPhoneアプリ公開時に2種類の画像登録が必要です。 1つ目はアイコン。アプリ …

Railsを立ち上げる

RubyのアップデートとRailsのインストールが無事終わったので、いよいよRa …

パーフェクトRuby 2章Rubyの基礎 2-6 モジュール

p57 2-6 モジュール 2-6-1モジュールの定義式 モジュールはインスタン …

no image
RailsTutorial4.0を高速で復習する。3.2章。

3.2章は最初のテストです。 Railsチュートリアルは、アプリケーションの振る …

Mac初期化。MavericksクリーンインストールUSB作る。

イラレやxcodeはMacBookAirに重すぎる、、そろそろ転売の時機なのかも …

RailsTutorial4.0を高速で復習する。5章。

さてRailsTutorial4.0も5章に入ります。まだ序の口です。5章ではb …

no image
RailsTutorial4.0を高速で復習する。6章。

第6章ユーザーのモデルを作成する。です。ここから開発っぽくなってきます。って今ま …