心はいつも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

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

  関連記事

Mac mini買いました。

Appleの新製品発表が近づいているというのに、Mac mini買ってしまいまし …

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

9.2認可、です。 自分以外の人が自分のProfileを変更できないようにします …

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

静的ページにaboutというページを追加するのですが、rails gを先にするの …

no image
MavericksアップデートしRuby2.0+Rails4.0.2にversion upする

何を今さら感ですが、MacはAirとMiniの2台持ちです。Airのほうを人柱と …

no image
IBActionのIBって?

railsもやってますが、xcodeも再開しています。 ところで、 IBActi …

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

11.2.3「フォローしているユーザー」ページと「フォロワー」ページ、です。 仕 …

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

11.2フォローしているユーザー用のWebインターフェイス、です。 モデルができ …

Google Webfont使ってみたよ

地元に戻ってきてまず思ったのは「観光サイトを立ち上げたい」ということ。いや、観光 …

ラクダと蛇(キャメルとスネーク、Camel&Snake)

蛇。 いきなりラクダと蛇ってなんぞやー!と思う人と、あ、それかと思う人。後者はプ …

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

6.3.5ユーザーを作成する、です。 userモデルはできています。開発用のデー …