心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。7.1.2章

   


7.1.2ユーザーリソース、です。
/user/newを/signupで表示させるために、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'

  resources :users
  match '/signup',  to: 'users#new',            via: 'get'
end

resources :usersはもう書いてあるので、RESTfulなルートはあるはず。

HTTPリクエスト URL アクション 名前付きルート 用途
GET /users index users_path すべてのユーザーを表示するページ
GET /users/1 show user_path(user) 特定のユーザーを表示するページ
GET /users/new new new_user_path ユーザーを新規作成するページ (ユーザー登録)
POST /users create users_path ユーザーを作成するアクション
GET /users/1/edit edit edit_user_path(user) id=1のユーザーを編集するページ
PATCH /users/1 update user_path(user) ユーザーを更新するアクション
DELETE /users/1 destroy user_path(user) ユーザーを削除するアクション
表7.1リスト7.3のUsersリソースが提供するRESTfulなルート。

無いのはviewとcontorollerです。

ユーザー個別表示のテストを書く

ユーザー個別表示、ユーザープロファイルページは、本来のRESTful pathなら/users/1で表示します。RailsTutorialは 7.1.2章でshowをとりあえず作ることになっていますが、TDDを優先するため、すっ飛ばします。

7.1.3ファクトリーを使用してユーザー表示ページをテストする、の途中にある、するユーザー表示ページのテストを書きます。

リスト7.9 ユーザー表示ページ用のテスト。
spec/requests/user_pages_spec.rb

require 'spec_helper'

describe "User pages" do

  subject { page }

  describe "profile page" do
    let(:user) { FactoryGirl.create(:user) }
    before { visit user_path(user) }
    #uaser.nameがコンテンツに表示されている
    it { should have_content(user.name) }
    #タイトルにuser.nameがある
    it { should have_title(user.name) }
  end

  describe "signup page" do
    before { visit signup_path }

    it { should have_content('Sign up') }
    it { should have_title(full_title('Sign up')) }
  end
end

let(:user) { FactoryGirl.create(:user) }
で、factorygirlを使って作ったデータがテストで使用されるとのこと。

テストは当然失敗します。

1) ユーザーページのテスト プロファイルページ
Failure/Error: it { should have_title(user.name) }
expected #has_title?(“Michael Hartl”) to return true, got false

別describeで書いてある”signupページのテスト”は当然ながら成功しています。

showを作る

リスト7.10 ユーザーのプロファイルページにタイトルと見出しを追加する。
app/views/users/show.html.erb

<% provide(:title, @user.name) %>
<h1><%= @user.name %></h1>

リスト7.5 Usersコントローラのshowアクション。
app/controllers/users_controller.rb

class UsersController < ApplicationController def show @user = User.find(params[:id]) end 略 end [code][/code] showアクションのためのviewとcontrollerを作るとテストは成功しました。 7.1.4gravatar画像とサイドバー、です。

ユーザー名の横に画像を表示する仕様

画像登録機能とか必要、、とおもってたのですがgravatarを使用するとのこと。gravatar_forヘルパー関数っていうのがrailsにあるそうです。
そしてここで

ビューを作成するときは、ページの構造が正確であるかどうかよりもページの外観の方を重要視するのが普通なので、少なくとも今はビューをテストする必要はありません。

viewにはテスト要らん宣言。いままでのは何だったんだ、、
ページ構成を把握しておくために、タイトルとコンテンツ、リンクのテストくらいはあってもいいのかな。ここら辺のノウハウ誰かに聞いてみたい。

gravaterヘルパーで写真表示

リスト7.12 ユーザー表示ビューに名前とGravatarを表示する。
app/views/users/show.html.erb

<% provide(:title, @user.name) %>
<h1>
  <%= gravatar_for @user %>
  <%= @user.name %>
</h1>

h1で画像も表示するという、みょうなコードですが、viewを変更して/user/1を見ると
gravatar_forが見つからないという旨のエラーがでます。

リスト7.13 gravatar_forヘルパーメソッドを定義する。
app/helpers/users_helper.rb

module UsersHelper

  # 与えられたユーザーのGravatar (http://gravatar.com/) を返す。
  def gravatar_for(user)
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
    image_tag(gravatar_url, alt: user.name, class: "gravatar")
  end
end

これを書くと、画像が表示されます。gravatar_forは自分で提供するメソッドだったのか。

ページにサイドバー追加

webデザイン系作業です。サイドバーを追加します。html5のasideタグでやってます。

リスト7.14 ユーザーのshowビューにサイドバーを追加する。
app/views/users/show.html.erb

<% provide(:title, @user.name) %>
<div class="row">
  <aside class="span4">
    <section>
      <h1>
        <%= gravatar_for @user %>
        <%= @user.name %>
      </h1>
    </section>
  </aside>
</div>

h1あるほうがasideなんですね。なんか変ですが続けます。

リスト7.15 SCSSを使用してサイドバーなどのユーザー表示ページにスタイルを与える。
app/assets/stylesheets/custom.css.scss

.
.
.

/* sidebar */

aside {
section {
padding: 10px 0;
border-top: 1px solid $grayLighter;
&:first-child {
border: 0;
padding-top: 0;
}
span {
display: block;
margin-bottom: 3px;
line-height: 1;
}
h1 {
font-size: 1.4em;
text-align: left;
letter-spacing: -1px;
margin-bottom: 3px;
margin-top: 0px;
}
}
}

.gravatar {
float: left;
margin-right: 10px;
}

ここでいったんコミットします。
次は
7.2ユーザー登録フォーム
です。

 - テクニカル ,

Message

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

  関連記事

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

3.5章は演習です。3問でています。最初の問題をやります。 1.サンプルアプリケ …

railsでtest unitを生成させない

ruby on rails3プリケーションプログラミングの本の内容をruby2. …

no image
MacBookAirは壊れるの?

1ヶ月ぶりにWindows機を立ち上げています。HDDのカリカリ言う音が冷や汗も …

no image
IBActionのIBって?

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

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

6.2.2プレゼンスを検証する、です。いよいよモデルにコードを書いていきます。 …

no image
コンビニで買った携帯充電器がUSB充電ケーブルとして使えて意外に便利だった件

ITの最大苦手項目、 充電。。。特にiPhone多様するようになって以来、ガラケ …

Objective-C苦節3ヶ月アプリ作れるようになった

このブログairpucci.comのメニューにアプリ開発追加しました。 昨年秋よ …

no image
destory

ruby on rails3プリケーションプログラミングの本の内容をruby2. …

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

6.3.3ユーザー認証、です。 新規ユーザー登録のときは入力で、:passwor …

RailsTutorial4.0を高速で復習する。8章。

仕様の探求 userモデルには、登録と認証、承認に必要なモデルは既に作ってありま …