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

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

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

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

Q&A

解決済

3回答

8617閲覧

Railsでeachメソッドを用いて合計金額の計算

shirou

総合スコア15

Ruby on Rails 5

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

0グッド

1クリップ

投稿2018/08/12 07:05

前提・実現したいこと

railsにてeachメソッドを用いて取り出した要素の合計

該当のソースコード

erb

1<tbody> 2<h1>カートの中身</h1> 3<% @cart.each do |item| %> 4<% @sum = 0 %> 5<tr> 6<td>商品番号: <%= item.id %></td> 7<td>価格: <%= item.price %></td><br> 8<% @sum += item.price %> 9<% end %><br> 10合計金額 <%= @sum %> 11 12</tr> 13</tbody> 14

###発生している問題

商品番号: 3 価格: 3000円 商品番号: 1 価格: 2500円 商品番号: 4 価格: 1000円 合計金額 1000

となり、計算が出来ていない。

試したこと

sumのままではundefined methodエラーが帰って来るので@をつけてインスタンス変数に変更
Rubyではこの記述で問題無いはずが、なぜRailsでは機能しないのか理解出来ません。

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

Rails 5.2.0

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

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

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

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

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

guest

回答3

0

よくわからないときは、ループの中で@sumをログに吐いたり(あくまでデバッグの際なら)画面に出したりしてみるとよいですよ。

で、確認すると分かるかと思いますが、<% @sum = 0 %>@cart.each ...の行よりも前に書く必要があります。現状は毎回初期化しているようです。

sumだとエラーになる、というのは重要なヒントで、ローカル変数のスコープの問題かと思います。上記修正を行えばsumでも動くんじゃないでしょうか。

投稿2018/08/12 07:11

takahashim

総合スコア1877

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

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

shirou

2018/08/15 05:25

丁寧な解説ありがとうございます! sumでダメなら@を付けてしまえと、短絡的発想でしたが仰る通りです。 ループ内で用いる変数とはいえ、初期値の指定は外に出してあげなければいけませんでした..!
guest

0

ベストアンサー

こんにちは

以下の2行

ruby

1<% @cart.each do |item| %> 2<% @sum = 0 %>

を入れ替えて、

ruby

1<% @sum = 0 %> 2<% @cart.each do |item| %>

としてみるといかがでしょうか?

投稿2018/08/12 07:09

jun68ykt

総合スコア9058

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

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

shirou

2018/08/15 05:27

回答ありがとうございます。 全くその通りです、ループ内に変数の初期値を記述していたのでは当然の結果でした...!
jun68ykt

2018/08/15 05:59

大丈夫です。落ち着いていきましょう。先は長いです。
guest

0

前提のRubyでは正しい記述の認識が違うのでは無いかと思い、適当にエディタで試してみたら果たして動きませんでした。
回答に指摘されている通り、sum=0がループ内に入っていることが問題です。
質問を投稿した直後に気づいて削除要請を出したのですが、お恥ずかしい。

投稿2018/08/15 05:22

shirou

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問