前提・実現したいこと
複数あるレコードを日付毎にsumして反映させたい
詳細
現在食べた食品毎に栄養価を登録する機能を実装しているのですが、
日付単位で1日あたりにとったカロリーを集計して反映させたいと考えております。
現状だと下記の画像のように食べたカロリーをそのまま繰り返し反映するようになっているのですが、
これを日付単位で合計させ反映をさせたいと考えています。
https://gyazo.com/2704706af43254bdb139e3fd00fed512
該当のソースコード
##fooddiaries_controller class FooddiariesController < ApplicationController #一部省略 def index @fooddiaries_period = current_user.fooddiaries.where(created_at: (current_user.idealweight.start_day)..(current_user.idealweight.last_day)) end end #idealweight.start_day :記録を始めた日 #idealweight.last_dat :記録を終える日
繰り返し反映させたいのでeach文を使っています
##index.html.erb <% @fooddiaries_period.each do |fooddiary| %> <tbody> <tr> <th class="left"><%= fooddiary.kcal %></th> <th class="left"><%= fooddiary.created_at %></th> </tr> </tbody> <% end %>
試したこと
上記のコードで反映をさせると期間内に入力した食品のカロリー情報全てが反映してしまいます。
https://gyazo.com/2704706af43254bdb139e3fd00fed512
###試したコード
group化も試してみましたが日付毎に1行ずつになっただけで特に足されることはありませんでした。
@fooddiaries_period = current_user.fooddiaries.where(created_at: (current_user.idealweight.start_day)..(current_user.idealweight.last_day)).group("date(created_at)")
カロリーsumで計算をしたいので下記のようにも書いてみましたがこちらもうまくいきませんでした。
@fooddiaries_period = current_user.fooddiaries.where(created_at: (current_user.idealweight.start_day)..(current_user.idealweight.last_day)).sum { |fooddiary| fooddiary[:kcal] }
なにかいい方法がありましたらご教授いただければと思います。
よろしくお願い致します。
##追記
Fooddiaryの構造
create_table "fooddiaries", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.integer "fooddate_id" t.integer "user_id" t.integer "idealweight_id" t.integer "gram" t.integer "kcal" t.integer "protein" t.integer "fat" t.integer "carbo" t.string "timing" t.date "date" t.datetime "created_at", null: false t.datetime "updated_at", null: false end
###どの項目でまとめたいのか
日付単位で「kcal」の合計値をまとめたいです。
newアクションにて食品毎にkcalが登録されていくので、それらを日付毎にまとめ合計値をindexに反映させたいです。
現状では合計値ではなくそれぞれ登録されたものが反映されております。
回答1件
あなたの回答
tips
プレビュー