0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Raills】閲覧数のカウント

Posted at

要件

  1. 各投稿(Book)が表示された回数(閲覧数)をカウントする
  2. 閲覧数を一覧ページ(indexページ)に表示する

実装の全体的な流れ

  1. Bookモデルに閲覧数を保存するカラムを追加
  2. show ページが表示されるたびに閲覧数をカウントする処理を追加
  3. index ページで各Bookの閲覧数を表示

1. Bookモデルに閲覧数を保存するカラムを追加

まず、各投稿の閲覧数を保存するために、Book モデルに view_count という新しいカラムを追加します。このカラムに、各投稿が表示された回数を保存していきます。

マイグレーションの作成

新しいカラムを追加するために、「マイグレーション」というデータベースの変更を反映するスクリプトを作成します。

ターミナルで以下のコマンドを実行します。

rails generate migration AddViewCountToBooks view_count:integer

これにより、view_count カラムを持つマイグレーションファイルが生成されます。

マイグレーションファイルの修正

次に、生成されたマイグレーションファイルを開いて、view_count の初期値を 0 に設定します。

class AddViewCountToBooks < ActiveRecord::Migration[6.1]
  def change
    add_column :books, :view_count, :integer, default: 0, null: false
  end
end
  • add_column :books, :view_count, :integer, default: 0, null: false:
    これは、books テーブルに view_count というカラムを追加し、そのデフォルト値を 0 に設定しています。これで、新しく作成された投稿の閲覧数は初期値として 0 が設定されます。

マイグレーションを実行

以下のコマンドでマイグレーションを実行し、データベースに変更を適用します。

rails db:migrate

これで、books テーブルに view_count カラムが追加され、各投稿の閲覧数を保存する準備が整いました。


2. show ページが表示されるたびに閲覧数をカウントする処理を追加

次に、各投稿の詳細ページ(show ページ)が表示されるたびに、その投稿の閲覧数を1増やす処理を追加します。

BooksController の修正

class BooksController < ApplicationController
  def show
    @book = Book.find(params[:id])
    
    # 閲覧数を1増やす処理
    @book.increment!(:view_count)
  end
end

解説

  • @book = Book.find(params[:id]):
    この行は、URLに含まれる投稿IDを使って、その投稿(Book)をデータベースから取得します。

  • @book.increment!(:view_count):
    これは、投稿の view_count(閲覧数)を1増やし、データベースにその変更を保存するメソッドです。increment! は、「指定されたカラムの値を1増やし、その結果をデータベースに反映する」メソッドです。! が付いていることで、エラーが発生した場合は例外が投げられます。


3. index ページで各Bookの閲覧数を表示

最後に、投稿の一覧ページ(index ページ)で各投稿の閲覧数を表示します。

BooksControllerindex アクションの修正

まず、BooksControllerindex アクションで、すべての投稿を取得します。

class BooksController < ApplicationController
  def index
    @books = Book.all
  end
end

index.html.erb の修正

次に、index ページで、各投稿の閲覧数を表示します。

<h1>投稿一覧</h1>

<table class="table">
  <thead>
    <tr>
      <th>タイトル</th>
      <th>著者</th>
      <th>閲覧数</th> <!-- 閲覧数の列を追加 -->
    </tr>
  </thead>
  <tbody>
    <% @books.each do |book| %>
      <tr>
        <td><%= link_to book.title, book_path(book) %></td> <!-- タイトルをリンクとして表示 -->
        <td><%= book.author %></td> <!-- 著者名を表示 -->
        <td><%= book.view_count %></td> <!-- 閲覧数を表示 -->
      </tr>
    <% end %>
  </tbody>
</table>

解説

  • <%= book.view_count %>:
    これは、各投稿の view_count(閲覧数)を画面に表示するコードです。@books.each do |book| で、すべての投稿を順番に取り出し、その閲覧数を表示しています。

まとめ

本日実装した「閲覧数のカウント機能」の流れをもう一度まとめます。

  1. view_count カラムを追加:

    • 投稿が何回表示されたかを保存するために view_count カラムを追加し、デフォルト値を 0 に設定。
  2. show アクションで閲覧数をカウント:

    • 各投稿の show ページが表示されるたびに、view_count を1増やす処理を追加。
  3. index ページに閲覧数を表示:

    • index ページで、すべての投稿の view_count を表示し、閲覧数が確認できるようにしました。

これで、閲覧数をカウントして表示する機能が再現できるようになります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?