My Profile
プログラミング学習歴②ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。
対象者
- 数を数えて表示する方法が知りたい方
- 表の作り方を知りたい方
目的
- 昨日と前日、前日比の情報をviewに表示する!
実際の手順と実例
1.準備と前提
◎前提として
- 本の投稿をするアプリを作成中で何回投稿したかをユーザーの詳細画面に表示します
- UserとBookは1:Nの関係
- モデル、コントローラー、ビューの3つに記述していきます。
2.Model
本の投稿数を数えるのでBook.rbに入力していきます。
scope :created_today, -> { where(created_at: Time.zone.now.all_day) } # 今日
scope :created_yesterday, -> { where(created_at: 1.day.ago.all_day) } # 前日
【解説】
モデルのスコープ機能を使います
scope :スコープの名前, -> { 条件式 }
今回でいうと、created_todayとcreated_yesterdayがスコープの名前に該当します。
また、Time.zone.now.all_dayで1日を表します。
1.day.agoで昨日を表します。
3.Controller
userのshow.html.erbに乗せていくのでUsersControllerに入力していきます。
def show
@user = User.find(params[:id])
@books = @user.books
@today_book = @books.created_today
@yesterday_book = @books.created_yesterday
end
【解説】
下から2つのインスタンス変数に注目。
モデルで定めたスコープの名前をここで使用しています。
4.View
bootstrapを使用しているためtableタグを使います
<div class = "table_width">
<table class="table table-bordered">
<thead>
<tr>
<th>今日の投稿数</th>
<th>前日の投稿数</th>
<th>前日比</th>
</tr>
</thead>
<tbody>
<tr>
<td><%= @today_book.count %></td>
<td><%= @yesterday_book.count %></td>
<td>
<% if @yesterday_book.count == 0 %>
前日の投稿はありません
<% else %>
<% @the_day_before = @today_book.count / @yesterday_book.count.to_f %>
<%= (@the_day_before * 100).round %>
<% end %>
</td>
</tr>
</tbody>
</table>
</div>
【解説】
昨日と今日の投稿。数はcountメソッドを使って表示しています。
if文を使って条件分岐し、前日比 = 昨日の投稿数÷前日の投稿数を定義しています。
また、to_fメソッドはオブジェクトの少数点までの数値も表示してくれるメソッドです。
おまけ
<div class = "table_width">
<table class="table table-bordered">
</table>
</div>
bootstrap導入していれば??これでスプレッドシートのような表作れる
参照
【Rails】 モデルのスコープ機能(scope)の使い方を1から理解する
【知らずに損した】ActiveSupportの期間指定メソッドall_day, all_week, all_month, all_year
【入門者向け】Webデザインの知識がなくてもOK!Bootstrapの使い方
【Rails】 世界で一番分りやすく詳しいcountメソッドの使い方
【初心者向け】Rubyのto_fメソッドの使い方を現役エンジニアが解説