ようやく最後の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 の使い方にも慣れることができて、記録を残してよかったです。
どなたかのお役に立っているとうれしいです。