質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

949閲覧

【Rails】目標値から実際の数値を引いた残りの数値を計算したい

yastinbieber

総合スコア49

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/06/05 07:20

前提・実現したいこと

1日の食事の『目標値』から『実際に食べた数値』を引いた『残りの数値』を算出したい

具体的に

fooddiaryテーブルにて日々の食べた食事を管理しています。
またidealweightテーブルにてそのユーザーが1日にとっていい目標数値を管理しています。

この目標数値と日々食べた食事の数値をfooddiaries/index画面にて反映させているのですが
合わせて目標数値から食べた食事の数値を引いた『残り数値』も同時に反映させたいです。

どなたか残りの数値を出すための正しい式をお教えいただけますと幸いです。

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

ruby

1 2##fooddiaries/index 3 4<h3>食事記録</h3> 5<%= form_tag(fooddiaries_path, :method => "get") do %> 6 <%= date_field_tag :search %> 7 <%= submit_tag "Search" ,:created_at => nil ,class: "" %> 8<% end %> 9<tr> 10 <th>foodname</th> 11 <th>gram</th> 12 <th>kcal</th> 13 <th>protein</th> 14 <th>fat</th> 15 <th>carbo</th> 16</tr><br> 17 18 <h4>■朝食</h4> 19 <%= render @fooddiary_morning %> 20 <h4>■昼食</h4> 21 <%= render @fooddiary_lunch %> 22 <h4>■夕食</h4> 23 <%= render @fooddiary_dinner %> 24 <h4>■間食</h4> 25 <%= render @fooddiary_snack %> 26 27 <h4>■合計</h4>#1日あたりの項目別合計数値 28 <%= @fooddiary_sum_kcal %>kcal 29 <%= @fooddiary_sum_protein %>g 30 <%= @fooddiary_sum_fat %>g 31 <%= @fooddiary_sum_carbo %>g 32 33 <h4>■目標</h4>#idealweightテーブルにて管理しているユーザーの目標数値 34 <%= current_user.idealweight.kcalintake %>kcal 35 <%= current_user.idealweight.intakeproteingram %>g 36 <%= current_user.idealweight.intakefatgram %>g 37 <%= current_user.idealweight.intakecarbogram %>g 38 39 <h4>■残り</h4> #errorが起こっている箇所 40 <%= current_user.idealweight.kcalintake - @fooddiary_sum_kcal %>kcal 41 <%= current_user.idealweight.intakeproteingram - @fooddiary_sum_protein %>g 42 <%= current_user.idealweight.intakefatgram - @fooddiary_sum_fat %>g 43 <%= current_user.idealweight.intakecarbogram - @fooddiary_sum_carbo %>g 44 45 <%= link_to "食事を追加する", "/fooddiaries/new", class: "" %>

ruby

1class FooddiariesController < ApplicationController 2##fooddiaries_controller 3 4 def index 5 @fooddiary_morning = params[:search].present? ? current_user.fooddiaries.where('created_at LIKE(?) and timing = ?', "%#{params[:search]}%", '朝食'): [] 6 @fooddiary_lunch = params[:search].present? ? current_user.fooddiaries.where('created_at LIKE(?) and timing = ?', "%#{params[:search]}%", '昼食'): [] 7 @fooddiary_dinner = params[:search].present? ? current_user.fooddiaries.where('created_at LIKE(?) and timing = ?', "%#{params[:search]}%", '夕食'): [] 8 @fooddiary_snack = params[:search].present? ? current_user.fooddiaries.where('created_at LIKE(?) and timing = ?', "%#{params[:search]}%", '間食'): [] 9 @fooddiaries = params[:search].present? ? current_user.fooddiaries.where('created_at LIKE(?)', "%#{params[:search]}%"): [] 10 @fooddiary_sum_kcal = @fooddiaries.sum(:kcal) 11 @fooddiary_sum_protein = @fooddiaries.sum(:protein) 12 @fooddiary_sum_fat = @fooddiaries.sum(:fat) 13 @fooddiary_sum_carbo = @fooddiaries.sum(:carbo) 14 end 15

試したこと

ユーザーの1日に摂取していい数値(<%= current_user.idealweight.kcalintake %>)から
1日に摂取した合計数値(<%= @fooddiary_sum_kcal %>)を引いた計算

ruby

1<%= current_user.idealweight.kcalintake - @fooddiary_sum_kcal %>kcal

を試してみましたが上記にキャプチャーしたようにTypeerrorが出てしまいます。

恐れ入りますが正しく反映される式をお教えいただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Rails はやったことがないので、間違っているかもですが。

エラーメッセージからすると、@fooddiary_sum_kcal が整数ではなく、Symbol の:kcal になっていると言っています。

以下の @fooddiary_sum_kcal を計算する箇所で、#sum の使い方を間違っているのが、原因かと思われます。

ruby

1@fooddiary_sum_kcal = @fooddiaries.sum(:kcal)

https://docs.ruby-lang.org/ja/latest/method/Array/i/sum.html
にある通り、#sum の引数は初期値であって、どの要素の和を求めるかを示すものではありません。

@fooddiaries の構造がどうなってるか知りませんが、以下のようにすれば、所望の処理をできるかと思われます。

ruby

1@fooddiary_sum_kcal = @fooddiaries.sum { |fooddiary| fooddiary[:kcal] }

投稿2020/06/05 08:13

taichi730

総合スコア318

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yastinbieber

2020/06/05 10:38

ご回答ありがとうございます。 仰っていただいたように実装したところ望んでいた結果を得ることができました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問