RubyMine で Rails Tutorial 14章

  •  
  •  
  •  

ようやく最後の14章

ブランチも多くなりましたね。

モデルの関係を作りますが、なかなかややこしいと思います。RubyMine で図を作ってみて、関係の線を見ると把握しやすいこともあります。

14.2.2 では演習がありました。users_profile_test.rb で、統計情報の表示について確認します。

  test "profile display" do
    get user_path(@user)
    assert_template 'users/show'
    assert_select 'title', full_title(@user.name)
    assert_select 'h1', text: @user.name
    assert_select 'h1>img.gravatar'
    assert_match @user.microposts.count.to_s, response.body
    assert_select 'ul.pagination'
    @user.microposts.paginate(page: 1).each do |micropost|
      assert_match micropost.content, response.body
    end

    assert_select 'strong#following'
    assert_match @user.following.count.to_s, response.body
    assert_select 'strong#followers'
    assert_match @user.followers.count.to_s, response.body
  end

Ajax での実装をすると、ログではこのように “as JS” と出てきます。

Started DELETE "/relationships/90" for 127.0.0.1 at 2018-05-30 14:14:23 +0900
Processing by RelationshipsController#destroy as JS
  Parameters: {"utf8"=>"✓", "commit"=>"Unfollow", "id"=>"90"}
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  ↳ app/helpers/sessions_helper.rb:17
  Relationship Load (0.1ms)  SELECT  "relationships".* FROM "relationships" WHERE "relationships"."id" = ? LIMIT ?  [["id", 90], ["LIMIT", 1]]
  ↳ app/controllers/relationships_controller.rb:14
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 4], ["LIMIT", 1]]
  ↳ app/controllers/relationships_controller.rb:14
  Relationship Load (0.1ms)  SELECT  "relationships".* FROM "relationships" WHERE "relationships"."follower_id" = ? AND "relationships"."followed_id" = ? LIMIT ?  [["follower_id", 1], ["followed_id", 4], ["LIMIT", 1]]
  ↳ app/models/user.rb:95
   (0.1ms)  begin transaction
  ↳ app/models/user.rb:95
  Relationship Destroy (0.3ms)  DELETE FROM "relationships" WHERE "relationships"."id" = ?  [["id", 90]]
  ↳ app/models/user.rb:95
   (1.5ms)  commit transaction
  ↳ app/models/user.rb:95
  Rendering relationships/destroy.js.erb
  Rendered users/_follow.html.erb (0.8ms)
   (0.1ms)  SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = ?  [["followed_id", 4]]
  ↳ app/views/relationships/destroy.js.erb:2
  Rendered relationships/destroy.js.erb (3.7ms)
Completed 200 OK in 16ms (Views: 8.4ms | ActiveRecord: 2.4ms)

リスト 14.49 は最後の演習です。何をテストするのがいいのか難しかったのですが、|micropost| でぐるぐる回すということから、投稿の内容が含まれているということを見ればいいのかなと思いましてこのようにしてみました。

  test "feed on Home page" do
    get root_path
    @user.feed.paginate(page: 1).each do |micropost|
      assert_match CGI.escapeHTML(micropost.content), response.body
    end
  end

ヒントにある CGI.escapeHTML を外してみると、I’m sorry のような文字列が I'm sorry. となるのでマッチしないということになりそうです。

長い長いチュートリアルが終わりました。わたしもいい復習になったと思います。
RubyMine の使い方にも慣れることができて、記録を残してよかったです。
どなたかのお役に立っているとうれしいです。