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

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

rails gでのファイル名、クラス名、アクション名

rails gすると、コントローラーとアクションができますが、 その書き方とファ …

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

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

Mac miniの液晶モニターにDell U2713HM使っています。

次期モデルが出るかもしれないのにMac miniを買って、自分でメモリを16Gに …

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

6.2.1最初のユーザーテストです。ユーザーモデルをrails g modelで …

WordPressの管理画面真っ白問題に対処しました

WordPressの自作テンプレを作ったはいいものの、管理画面が真っ白になって投 …

Ruby1.9+Rails3.2に加えて、Ruby2.0+Rails4.0のプロジェクトを作る。

Ruby1.9+Rails3.2のプロジェクトは作りましたが、その後、Ruby2 …

初めてのRuby2章「配列とハッシュ」

Railsだってgemの一種!ってことで、Rubyの文法からちゃんとやりたいです …

OpneSSL,Readline,Libyamlをインストールする

先ほどインストールしたHomebrewを使って、rbenvをインストールしたいと …

no image
Gitをインストールする

Rails開発がしたいのですが、今後必要になるでしょうからGitをインストールし …