BETA

Rails Tutorialやってみた!40(13章-3)

投稿日:2019-05-09
最終更新:2019-05-09

100DaysOfCode 65/100

今日やること

  • マイクロポストの表示
  • プロフィール画面のマイクロポストをテスト

マイクロポストの表示

前回はマイクロポストのソートを行いました。

特定の順序に依存している(順番が決まっている)要素を表示する際は、通常のリストulではなく順番付きリストolを使います。

<ol class="microposts">  
  <%= render @microposts %>  
</ol>  

will_paginateを使う

Usersコントローラにおいてユーザーのwill_paginateが引数なしで動作したのは、Usersコントローラには@userというインスタンス変数が存在するだろう、ということを前提としているためです。(Railsが自動的に判断してくれる)

今回はUsersコントローラからマイクロポストに対してwill_paginateを使うので、明示的に@micropostというインスタンス変数を指定してあげる必要があります。

@microposts = @user.microposts.paginate(page: params[:page])  

このように@userとの関連付けを利用することで、必要なページを参照することができます。

このあたりはよく整理しておいたほうがよさそうです。

fakerでマイクロポストを大量追加

まだ投稿機能がないので、データベースに直接ダミーのマイクロポストを追加して確認します。

ユーザーのときと同様、seeds.rbに記述→rails db:seedを行います。

表示できました。

順番付きリストolはデフォルトでリストの番号を表示します。
マイクロポストに関しては不要な要素なので、そこも含めてCSS側でレイアウトを調整しましょう。

いい感じです。

テスト

新規機能が実装できたら、今のうちにテストを書きます。

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 'div.pagination'  
    @user.microposts.paginate(page: 1).each do |micropost|  
      assert_match micropost.content, response.body  
    end  
  end  
end  

assert_selectはともかく、assert_matchはやや扱いが難しい印象を受けます。

response.body、つまりHTML全体から一致するものを探しているので、ある種アバウトというか、豪快な探し方です。

このあたり、どのように使い分けるべきかは要学習ですね。

to_sを使う

assert_match @user.microposts.count.to_s, response.body  

ここではcountto_sしてint型からstring型に変換している点に注意です。

「特定の文字列があること」の確認をするためにはstring型である必要があるので、例えば「1~100の数字で3の倍数と3のつく数字だけ!」をつけるメソッドであれば、

range = 1..100  

range.each do |num|  
  if num % 3 == 0 || num.to_s.include?("3")  
    puts "#{num}!"  
  else  
    puts num  
  end  
end  

このように数値をto_sしないと3を含んでいるか判定することができません。

終わりに

今回のwill_paginateのように、Railsが気を利かせてくれることで簡単に記述できるものはこれまでにもたくさんありました。

しかし、「Railsは何を補完してくれているのか」「本来はどのような処理が行われているのか」をきちんと把握していないと、むしろ混乱のもとになってしまうと感じました。

RailsをやるならRubyもしっかり知ろう、などの言葉の意味が痛いほど分かります。基礎を大切にこれからも頑張ります。

次回以降やること

  • マイクロポストの操作(作成、削除)
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@tammcの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう