Ruby on Rails Tutorial (7)

朝練。昨晩の原因確認など。
とりあえず .gitignore に *~ を追加。git rm したいんだけど纏めて一気に、は微妙な模様。てか、そもそも git add されていなかったのか。

git rm `find|grep '~'`

これだけで commit 作っておいた方が良いな、ということで .gitignore も add して commit 作成。
次は昨晩のソレの確認。何が原因で何を盛り込んだから正常動作するようになったのかが分からない次第。まず Gemfile を以下にしてみて実行。

group :test do
  gem 'capybara', '1.1.2'
  gem 'factory_girl_rails', '4.1.0'
end

#group :test, :development do
#  gem 'factory_girl_rails', '4.1.0'
#end

(一部のみ引用です、念の為)
で、試験実行。

$ bundle exec rspec spec/

green 終了。次はこのまま factories.rb の場所を変更してみます。今は spec/support 配下におりますが spec/ 配下に場所移動して試験実行しましたが green 終了でした。

と、いうことで

今の環境は以下なんですが

  • ruby 1.9.3p327
  • Rails 3.2.11
  • gem 1.8.23
  • factory_girl (4.1.0)

factories.rb の記述は以下でないと駄目な模様です。

FactoryGirl.define do
  factory :user do |u|
    u.name     { "Michael Hartl" }
    u.email    { "michael@example.com" }
    u.password { "foobar" }
    u.password_confirmation { "foobar" }
  end
end
7.1.4 A Gravatar image and a sidebar

時間あるので続きを。config/environments/test.rb 云々はとりあえずスルーします。
app/views/users/show.html.erb を以下にせよ、とあります。

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

試験は red ってありますが実行してみると確かに以下。

Failures:

  1) User pages profile page 
     Failure/Error: before { visit user_path(user) }
     ActionView::Template::Error:
       undefined method `gravatar_for' for #<#<Class:0x000000055d6330>:0x00000004f86390>
     # ./app/views/users/show.html.erb:3:in `_app_views_users_show_html_erb__116738231455094862_41690340'
     # ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in <top (required)>'

  2) User pages profile page 
     Failure/Error: before { visit user_path(user) }
     ActionView::Template::Error:
       undefined method `gravatar_for' for #<#<Class:0x000000055d6330>:0x000000058b4228>
     # ./app/views/users/show.html.erb:3:in `_app_views_users_show_html_erb__116738231455094862_41690340'
     # ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in <top (required)>'

テキストの通り、gravatar_for 未定義とありますね。app/helpers/users_helper.rb に以下なヘルパメソドを定義せよとのこと。

module UsersHelper

  # Returns the Gravatar (http://gravatar.com/) for the given user.
  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

で試験実行して green 確認。あと gravatar の見栄え云々って解説があるので動作確認してみます。確かに user@example.com だとテキストの通りのアイコンで、example@railstutorial.org に変更すると、ですね。すばらです。
あとはちょっと見栄えを変更とのことなのでそちらも盛り込んでおきます (引用略)。

時間切れ

もしアレなら残り (?) を云々するかも。