Ruby on Rails Tutorialのエッセンスを自分なりに整理してみる6
[Rails]TwitterBootstrapとSassとAssetPipeline
http://qiita.com/kidachi_/items/4c47b28b2a74c723d835
の続き。
Ruby on Rails Tutorial(chapter5)
http://railstutorial.jp/chapters/filling-in-the-layout#sec-layout_exercises
##Railsにおけるリンクの記述方法
<a href="/static_pages/about">About</a>
というリンクは、ERB中では以下のように記述していく。
<%= link_to "About", about_path %>
「about_path」を名前付きルートと言う
→各パスに振られた変数のようなもの。
####各ページ、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 |
###名前付きルートの動作テスト
specファイルを編集。
visit '/static_pages/about'
↓visit先を名前付きルートに置き換え
visit about_path
つまり以下のような形。
require 'spec_helper'
describe "Static pages" do
~
describe "About page" do
it "should have the h1 'About Us'" do
visit about_path
expect(page).to have_content('About Us')
end
it "should have the title 'About Us'" do
visit about_path
expect(page).to have_title("Ruby on Rails Tutorial Sample App | About Us")
end
end
~
end
当然この時点ではテストはRed。
Red to Green(プロダクトコードの実装)
名前付きルートを定義するために、config/routes.rbを以下のように編集する。
get 'static_pages/about'
↓修正
match '/about', to: 'static_pages#about', via: 'get'
これで、
- ’/about’(GETリクエスト)がStaticPagesControllerのaboutアクションにマッピングされる
- そのマッピング(パス)を返却するabout_pathという名前付きルートが生成される
- 名前付きルートはControllerとViewで利用できる
※「match」を「get」にしても同じ名前付きルートになるが、
matchを利用する方がより「Railsっぽい」。
####定義される名前付きルートの中身
about_path -> '/about'
about_url -> 'http://localhost:3000/about'
→hoge_path
とhoge_url
の二つが定義される
- '/hoge’のみを取得する場合はhoge_pathを使う。
- リダイレクトの場合のみhoge_url書式を使用する。
- HTTP標準では技術的にリダイレクト後にフルURLが要求されるため。
- (ただし、ほとんどのブラウザではどちらの方法でも動作する。)
###TOPページへのルートマッピング
通常通り、以下のようなコードを使用することも一応可能。
match '/', to: 'static_pages#home', via: 'get'
しかし、実際にはルート (root) については上のように書く必要はなく、
root 'controller_name#action_name'
で表す。
SampleApp::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
####root 'static_pages#home'で定義される名前付きルートの中身
root_path => '/'
root_url => 'http://localhost:3000/'
「あるページからあるページへの遷移(リンク)」のテスト
visit foo_path
click_link "var"
で、「ページfooからリンクvarへの遷移」に対するテストが出来る。
require 'spec_helper'
describe "Static pages" do
~
it "should have the right links on the layout" do
visit root_path
click_link "About"
expect(page).to have_title(full_title('About Us'))
click_link "Help"
expect(page).to have_title(full_title('Help'))
click_link "Contact"
expect(page).to have_title(full_title('Contact'))
click_link "Home"
expect(page).to have_title(full_title(''))
click_link "Sign up now!"
expect(page).to have_title(full_title('Sign up'))
click_link "sample app"
expect(page).to have_title(full_title(''))
end
end
以下に続く
[Rails] RSpecのリファクタリング
http://qiita.com/kidachi_/items/ec184deb106e4e5c90c3