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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

1966閲覧

Ruby on Rails Ruby の計算式の記述方法

takeshi075

総合スコア3

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/28 14:57

編集2020/06/28 15:00

##実現したいこと
Ruby on Rails でアプリ制作をしています。
ユーザーに数字を入力してもらい、その数字をもとに以下の計算をして結果を出力したいです。

(最大重量)=(使用重量)×{1+(回数÷40)}

ユーザーが入力するのは 使用重量、回数 の2つです。
それぞれ、使用重量は @rm.use_weight  、回数は @rm.reps です。

データベースに保存し値を持ってくることは出来ています。

お手数ですがご教授いただけますでしょうか。
よろしくお願い致します。

##該当のソースコード

以下に試したコードを記載します。
いずれも思う結果が表示出来ませんでした。
(計算式はビュー画面に記述しています)

Ruby

1%p #{((@rm.reps / 40) + 1) * @rm.use_weight .to_f}

以下のコードの場合は undefined method `+' for nil:NilClass とエラーが出てしまいます。

Ruby

1%p a = #{@rm.reps / 40 .to_f} 2%p b = #{a + 1 .to_f} 3%p #{b * @rm.use_weight .to_f}

##補足情報 (ツールのバージョンなど)
MacBook Pro 13
macOs 10.15.4
rails 5.2.3
PostgreSQL. Versions 9.1

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

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

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

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

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

guest

回答2

0

viewに ruby 演算を書くのはあまり好きでありません。
この課題のようにモデルの状態そのものを求める場合は特に。

class Rm def max_weight use_weight * (1 + reps / 40 ) end end

しておいて、view では @rm.max_weight で表示する、のが私流です。

投稿2020/06/28 22:47

winterboum

総合スコア23567

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

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

takeshi075

2020/06/29 08:44

ご返信ありがとうございます! せっかくご返信頂いたのですが、今回の課題については1番目の回答して頂いた方を採用させていただきました。 申し訳ありません。 ちなみに、viewに演算を書くのが良くないのはどういった理由なのでしょうか? 可読性が悪くなる。 後々のメンテナンス性が悪くなる。 などですか? 知識が浅く想像が及ばないので、良ければ教えていただけますでしょうか?
winterboum

2020/06/29 08:49

一番ベースとなるのは、 「その処理はどのobjectが責任を持つべきか」というオブジェクト指向の考え方からです。 最大重量 というのは コントローラでもviewでもなく、modelのオブジェクトの特性なので。モデルに責任を取ってもらう。 で、なせそういう考え方になったのかというと  可読性が悪くなる。  後々のメンテナンス性が悪くなる。 などもその一つです
takeshi075

2020/07/03 03:10

丁寧に解説して頂き、ありがとうございます! また、何かありましたら、よろしくお願いします!
guest

0

ベストアンサー

hamlでしょうか?

hamlの場合、式を分けるには

haml

1- a = @rm.reps / 40.0 2- b = a + 1 3%p #{b * @rm.use_weight}

ただ気になるのがそれぞれの型が数値になっているかです。
@rm.reps.classなどを確認してみるといいでしょう。

Integerならば数値ですが、Stringですと文字列なのでto_iもしくはto_fする必要があります。

投稿2020/06/28 16:43

asm

総合スコア15149

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

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

takeshi075

2020/06/29 08:35

ご返信ありがとうございます! 上記のコードで思う様に表示することが出来ました! ちなみに、Integer で登録しているので to_iもしくはto_f を使用しなくてもOKでした! 今後質問する際はそういった情報も記載する様にします! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問