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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

462閲覧

Model内での計算ができない

Lion000

総合スコア1

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/07/04 15:54

前提

Rails初心者です。
Railsで基礎代謝を計算しようとしています。

実現したいこと

身長(:height1)体重(:weight1)年齢(:age1)を入力⇨
数値を元にmodel内で計算⇨
viewに表示

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

エラー内容を確認し調べてみると、数字と文字は計算できないのような事でした。
しかし私は、データ型も[integer]で作成したので、一体どこで文字として認識しているのかわかりません。

見づらいコードで申し訳ございませんが、宜しくお願い致します。

TypeError in Kcals#new

Showing /home/ec2-user/environment/recodiet/app/views/kcals/new.html.erb where line #28 raised:

:weight1 can't be coerced into Float

Extracted source (around line #14):

12 13 def bmr1_keisan 14 (13.397 * :weight1 + 4.799 * 1 - 5.677 * 1 + 88.362) 15 end 16 end

試したこと

to_i

kcal.rb

class Kcal < ApplicationRecord validates :weight1, presence: true validates :height1, presence: true validates :age1, presence: true def bmr1_keisan (13.397 * :weight1 + 4.799 * 1 - 5.677 * 1 + 88.362) end end

###kcals_controller.rb

class KcalsController < ApplicationController def index @kcal = Kcal.all end def new @kcal = Kcal.new end def create @kcal =Kcal.new(kcal_params) if @kcal.save puts '保存に成功しました' else puts '保存に失敗しました' end #redirect_to end def show @kcal = Kcal.find(params[:id]) @weight1 = @kcal[:weight1] @height1 = @kcal[:height1] @age1 = @kcal[:age1] #@bmr1 = @kcal.bmr1_keisan #@tdee1 = @bmr1*1.3 end private def kcal_params params.require(:kcal).permit(:weight1,:height1,:age1) end end

###new.html.erb

<%=link_to 'マイページ', mypage_show_path, class: 'btn btn-default btn-black' %> <%=link_to 'グラフ', graff_show_path, class: 'btn btn-default btn-black' %> <%= link_to 'カレンダー',meetings_path, class: 'btn btn-default btn-black' %> <%= form_for :kcal,url: kcals_path do |f| %> <p> <%= f.label :体重 %><br> <%= f.number_field :weight1 %> </p> <p><%= f.label :身長 %><br> <%= f.number_field :height1 %> </p> <p><%= f.label :年齢 %><br> <%= f.number_field :age1 %> </p> <p> <%= f.submit :計算 %> </p> <% end %> <p> 結果 </p> <%= @kcal.bmr1_keisan %>

schema.rb

create_table "kcals", force: :cascade do |t| t.integer "weight1" t.integer "height1" t.integer "age1" t.integer "bmr1" t.integer "tdee1" t.datetime "created_at", null: false t.datetime "updated_at", null: false end

補足情報(FW/ツールのバージョンなど)

Rails
Ruby

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

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

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

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

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

Ryo-EAST

2021/07/04 18:03

weight1の前にある「:」消せば、計算実行できないでしょうか? 変数として扱うときは「:」は不要だと思います。 def bmr1_keisan (13.397 * weight1 + 4.799 * 1 - 5.677 * 1 + 88.362) end
Lion000

2021/07/05 11:37

ご連絡ありがとうございます。 認識?はされたと思いますが、 同じType Errorで「nil can't be coerced into Float」 とエラーが出ております。 コントローラーの部分で入力しているのですが、何故nilになってしまうのでしょうか?
Ryo-EAST

2021/07/05 15:41 編集

・そのエラーはどういう操作をした時に発生しますか? ①new.html.erbを開く際に表示 →一番下の<%= @kcal.bmr1_keisan %>を削除で表示しないでしょか?  (作成ビューを表示する際に@kcalの中は空だと思うのでnilのようなエラーが出ないか) ②formで保存する際に表示 →formやcreateにbmr1とtdee1のデータが作成されないのでnilになるのでは? ・nilなのはどの時のどの変数でしょうか? エラー画面を見ると前後に変数名が書いてあると思います。 どの時にどうなったかの情報が少ないので 違うかもしれませんが。
Lion000

2021/07/06 13:50

ご連絡ありがとうございます。 該当するのは①でございます。 削除を行うと、表示はできます。 しかし、その場合だと目的の「計算結果を表示」ができなくなってしまいます。 申し訳ございません。 エラー画面の変数名の場所がわからないので、 代わりにエラー画面のスクリーンショットのURLを貼ります。 お手数おかけしますが、そちらからご確認頂いても宜しいでしょうか? https://gyazo.com/91b041b0ebb73ea5a0d5a3066717ae70
Ryo-EAST

2021/07/06 14:32

https://qiita.com/miyzawa/items/18bb8d88ad004cbc439c やろうとしていることが似ているこの記事を参考にするとできるのではないでしょうか? ①def bmi1keisannで計算する処理となっていますが 計算した結果をデータベースに保存したいのか指定していないので動かないと思います ②エラー画面(ブラウザ)の下部に黒いスペースは無いでしょうか? そこに@kcalやweight1とか入力するとその時の値を確認できます
guest

回答2

0

自己解決

計算画面に結果を表示させようとしたところ、数値を入力と同時に計算していて、失敗していました。

なので、viewに新しく結果だけを表示させるページを作成し、計算するページと分けたところ無事解決致しました。

解決のきっかけを下さった皆様、誠にありがとうございました。

投稿2021/07/06 14:44

Lion000

総合スコア1

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

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

0

一体どこで文字として認識しているのかわかりません。

エラーメッセージのとおりです。:weight1シンボルというオブジェクトで、そのまま計算に組み込むことはできません。

投稿2021/07/04 22:25

maisumakun

総合スコア146018

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

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

Lion000

2021/07/05 11:51

ご連絡ありがとうございます。 計算に組み込みたい場合の書き方は、どのようにすればよろしいでしょうか? 個人的にコントローラーの部分で書けていたと、思っておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問