ぞえの技術めも

Ruby on Rails勉強中

【181日目】【1日20分のRailsチュートリアル】【第12章】フィードを初めて実装する

Ruby on Railsチュートリアル(第3版)

今日は「12.3.2 フィードを初めて実装する」から。

12.3.2 フィードを初めて実装する

最初に、このフィードで必要なクエリについて考えましょう。ここで必要なのは、micropostsテーブルから、あるユーザー (つまり自分自身) がフォローしているユーザーに対応するidを持つマイクロポストをすべて選択 (select) することです。

SELECT * FROM microposts
WHERE user_id IN (<list of ids>) OR user_id = <user id>

そうですね。こうなりますね。

これらの条件から、フォローされているユーザーに対応するidの配列が必要であることがわかってきました。これを行う方法の1つは、Rubyのmapメソッドを使用することです。

検索のために配列を用意する、と。

実は、?を内挿すると自動的にこの辺りの面倒を見てくれます。さらに、データベースに依存する一部の非互換性まで解消してくれます。つまり、ここではfollowing_idsメソッドをそのまま使えばよいだけなのです。

なんか色々説明あったけどfollowing_idsを使うだけでいいらしい…!便利だな…

app/models/user.rb

  # ユーザーのステータスフィードを返す
  def feed
    Micropost.where("user_id IN (?) OR user_id = ?", following_ids, id)
  end

これだけでテスト通った!
結果だけ見ればすっきりしてるけど、ここに至るまでの過程も理解しておくと自分で作るとき参考になりそう。

$ bundle exec rake test
74 tests, 371 assertions, 0 failures, 0 errors, 0 skips

しかしリスト12.43にはまだ足りないものがあります。それが何なのか、次の節に進む前に考えてみてください(ヒント:フォローしているユーザーが5000人もいたらどうなるでしょうか)。

データベースからの読み込みにめっちゃ時間かかるね。アプリケーションの動き遅くなるね。多分ね。
ページング的な処理を入れるのかな…??

今日の学習時間は【15分】

次は「12.3.3 サブセレクト」から。