miyatsu's blog

なんか勢いでかいてます。

gaienrb#12を開催しました。

こんにちは。みやつです。

ブログもサボっていて更新にだいぶ間が開いてしまいましたが、本日gaien.rb#12を開催しましたので久しぶりに更新です。

学生さんが来た

今回の開催では初めて学生の方が参加してくれました。最近の学生は勉強会とかにとてもアクティブですごいですね。自分が学生のころなんかそもそも機会がなかったように思います。良い時代になったもんだ。

さて、来てくれた方も初心者ということで、初心者どうしrails tutorialをすすめることにしました。 ただ、彼は僕らよりも先に進んでいたので、どうしようかなということになりましたが、エラーで困っているというのでそこをみんなで一緒にみて解決して、各自もくもくしようという方針をたてて進めていきました。

エラーメッセージを読むのは大事

最初に困っていたエラーを見せてもらいました。

Failures:

  1) User pages signup page should have content "Sign up"
     Failure/Error: it { should have_content('Sign up') }
       expected #has_content?("Sign up") to return true, got false
     # ./spec/requests/user_pages_spec.rb:10:in `block (3 levels) in <top (required)>'

  2) User pages signup page should have title "Ruby on Rails Tutorial Sample App | Sign up"
     Failure/Error: it { should have_title(full_title('Sign up')) }
       expected #has_title?("Ruby on Rails Tutorial Sample App | Sign up") to return true, got false
     # ./spec/requests/user_pages_spec.rb:11:in `block (3 levels) in <top (required)>'

spec/requests/user_pages_spec.rbの10行目で意図していない結果となっていることがわかります。それでuser_pages_spec.rbを見せてもらいました。

require 'spec_helper'

describe "User pages" do

  subject { page }

  describe "signup page" do
    before { visit signup_path }

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

signup_pathにアクセスすると「Sign up」という文字列が含まれていることを期待しています。 signup_pathは以下のようにroutes.rbにかかれています。

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

usersコントローラのnewアクションが呼ばれます。ここにはメソッドが定義してあるだけなので、viewを確認してみました。

<h1>Users#new</h1>
<p>Find me in app/views/users/new.html.erb</p>

確かにSign upはないですね。

ということで、エラーはviewが意図したものではなかったために起こっていました。 エラーメッセージから原因を特定することは慣れてくると当然のこととしてやっていますが、最初のころはメッセージなんて読まなかったよなぁとしみじみ考える出来事でした。

やっぱりエラーメッセージって大事なんですよね。 自分でエラーを設計するときもメッセージはわかりやすく意味のあるものにしなきゃいかんですね。

今日の進捗

ということで、みんなでエラーの原因を特定したりしながら進めた今回ですが、結果的には6.2.4フォーマットを検証するまで終わりました。やったことは

  • Userモデルを作る
  • Userモデルを検証する。
    • nameの存在確認および、長さの検証
    • emailの存在確認および、フォーマットの検証

と、モデルの定義とバリデーションです。 これでモデルも作れるようになりました。