心はいつも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を高速で復習する。6.2.5章。

6.2.5一意性を検証する、です。メールアドレスをIDとして使うため(でなくとも …

詳解 Objective-C 2.0 第3版 CHAPTER2 Objective-Cのプログラム

Objective-Cの解説はメッセージから始まる。このメッセージという概念、も …

パーフェクトRuby 3章制御構造/メソッド/組み込み関数 3-1演算子

パーフェクトRuby2章の後は6章をやろうと思っていましたが、やっぱり順番にやっ …

MacにGUIのSQLite3クライアントを入れる。

ターミナルからコマンドたたけばいいだけですが、DBスキーマをちょっと確認したいと …

初めてのRuby2章 2.2ハッシュ

ハッシュ ハッシュとは、オブジェクトにキーを対応させたもの。 C++,Javaで …

パーフェクトRuby 2章Rubyの基礎 2-1 Hello,Ruby

12章から5章まではPart2 Ruby言語仕様 です。 2章 Rubyの基礎 …

no image
恐ろしや、WordPressのDBパスワードは平文でおいてある

先ほどサーバーのDBをいじっていてですね、、久々だったのでDBパスワード忘れてし …

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

演習1問目。 リスト6.20の、メールアドレスを小文字に変換するコードに対するテ …

no image
G+ウィジェット設置してみました

(この投稿は別ブログameblo.jp/sweetfからの転載です) G+ウィジ …

no image
iPhoneのKindleアプリでChip Conley氏の本を読んでみました。その1

GWで電子本も文庫本も読み終え、「新しい本に入れ替えないと~」と思いながらすっか …