心はいつも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
Rubyの%を使う記法のうち、 %w

Rubyで%を使う記法は、たのるー(たのしいRuby)によると、以下の6通り % …

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

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

教育のためならば、iPadアプリ料金なんて青天井ですわ

今年4月、USでのiPad発売。姪の中学入学祝いにちょうどいいなと思っていたら日 …

no image
サイドバーの幅を決めたい(Googleアドセンス編)

サーバー移転したままブログが放置状態になっています。 その間も検索エンジン経由で …

no image
gamilアカウントが乗っ取られました

朝起きてすぐ行うメール確認。iphoneでgmail接続できないってエラーが出る …

no image
MacBookAirにMacAppStoreからソフトをダウンロード

MacBookAir 10日目。快調です。 WindowsからMacの移行でつま …

初めてのRuby8章 8.4特異メソッドと特異クラス

特異メソッドと特異クラス プログラムなんて、クラスの継承だけで書けてしまうのが良 …

no image
あんたのrakeは新しいけど古いのが必要なんだよっ!!と怒られた

Mavericksってrubyが2.0になったんですね。 てのはおいといて、 r …

no image
ブログのデザイン開発、着手から完成まで今日1日でやります

久々のブログです。 昨日アクセス解析も1年ぶりに見たのですが、何がなくとも一定の …

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

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