ぞえの技術めも

Ruby on Rails勉強中

【56日目】【1日20分のRailsチュートリアル】【第7章】デバッガーの使い方とGravatar画像の表示

Ruby on Railsチュートリアル(第3版)

今日は「7.1.3 デバッガー」から。

7.1.3 デバッガー

Rails 4.2からは、byebug gemを使ってもっと直接的にデバッグできるようになりました (リスト3.2)。

へー。byebugはもうGemfileに書いてるのですぐ使えるらしい。

showアクションにデバッガーを追加。

app/controllers/users_controller.rb

  def show
    @user = User.find(params[:id])
    debugger
  end

サーバー起動して/users/1にアクセス。デバッガーを試してみます。

$ rails server -b $IP -p $PORT
 :
[1, 9] in /home/ubuntu/workspace/sample_app/app/controllers/users_controller.rb
   1: class UsersController < ApplicationController
   2:   def show
   3:     @user = User.find(params[:id])
   4:     debugger
=> 5:   end
   6: 
   7:   def new
   8:   end
   9: end
(byebug) 

デバッガー差し込んだ箇所にアクセスするとRailsサーバーがbyebugのプロンプトを表示してくれるそう。

Railsコンソールのようにコマンド実行できてデータの中身とか見れるらしい。便利!

(byebug) @user.name
"Michael Hartl"
(byebug) @user.email
"mhartl@example.com"
(byebug) params[:id]

Ctrl-Dでデバッガー終了。
アプリの挙動で困ったらこれでデバッグすればいいのか~。

デバッグが終わったらshowアクション内のdebuggerの行を削除してしまいましょう (リスト7.7)。

削除しました。

7.1.4 Gravatar画像とサイドバー

ここでは世界共通のアバターとして認識されている「Gravatar」をユーザープロファイルに導入してみましょう。

画像の情報をデータベースとかに保存するわけではないんのかな…?まぁ追々分かるか。

Gravatarは無料のサービスで、プロファイル写真をアップロードして、指定したメールアドレスと関連付けることができます。

プロファイル写真を変更したい、ってときに便利ですよね。
わざわざサービス毎にプロファイル写真を変える必要がなくなって、Gravatarの写真変えるだけでいいから。 (ただ私は対応してるサービスで使ってるのはWordPressぐらいかな…)

ここでは、リスト7.8のようにgravatar_forヘルパーメソッドを使用してGravatarの画像を利用できるようにします。

app/views/users/show.html.erb

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

利便性を考えてgravatar_forをUsersコントローラに関連付けられているヘルパーファイルに置くことにしましょう。

デフォルトでgravatar_forメソッドが用意されてるのかな、って思ったら違った。
これから追加します。

GravatarのURLはMD5ハッシュを用いてユーザーのメールアドレスをハッシュ化しています。

Gravatarにはメールアドレスをハッシュ化したものを渡す必要がある、と。

Rubyでは、Digestライブラリのhexdigestメソッドを使用したMD5ハッシュアルゴリズムが実装されています。

ふむふむ。

app/helpers/users_helper.rb

module UsersHelper

  # 引数で与えられたユーザーのGravatar画像を返す
  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

これで/users/1のページを表示すると、、、

f:id:kt_zoe:20161020124341p:plain

画像が表示されました!お手軽!!

ここにはデフォルトのGravatar画像が表示されていますが、これはデフォルトのメールアドレスuser@example.comが本当のメールアドレスではないためです。

Gravatarに登録されていないメールアドレスを渡すとデフォルトの画像が表示されるってことかー。

アプリケーションでカスタムGravatarを利用できるようにするために、update_attributes (6.1.5) を使用してデータベース上のユーザー情報を更新します。

Railsコンソールでユーザー情報を更新。

$ rails console
>> user = User.first
>> user.update_attributes(name: "Example User",
?>                        email: "example@railstutorial.org",
?>                        password: "foobar",
?>                        password_confirmation: "foobar")
=> true

/users/1を再読み込みすると、、、

f:id:kt_zoe:20161020124403p:plain

おぉー!画像取れてる!

ここではユーザーのメールアドレスに example@railstutorial.org を使用しました (図7.8)。このメールアドレスはRailsチュートリアルのロゴでも使用されています。

Gravatarにexample@railstutorial.orgが登録されてて、プロファイル画像が取得できてる、ってことかー。

今日はここまで。
画像表示ってテンション上がる。

プロフィール画像なら自前のサービス内で管理しなくても外部サービスを使う、って手もあるんだなぁ。

今日の作業時間は【31分】

次は「7.1.4 Gravatar画像とサイドバー」のユーザー情報ビューのレイアウトを変更するところから。