0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

各レコードの計算結果の合計を出す

Last updated at Posted at 2020-01-22

配列を覚えると大変便利なことに気付いた。

1つの注文に対して複数の注文商品が登録されており、1つの注文の合計金額をorders/show画面に出したい。
使用するメソッドは今回.injectを使う。
関係は以下とする。

app/assets/models/order.rb
class Order < ApplicationRecord
 has_many :order_products, dependent: :destroy
end
app/assets/models/order_product.rb
class OrderProduct < ApplicationRecord
 belongs_to :order
end

OrderProductモデルにあるのは以下のカラム
・product_name(商品名)
・quantity(数量)
・price(単価)

orders_controller.rb
def show
 @order = Order.find(params[:id])
 @total = [] #配列の初期化
 @order.order_products.each do |order_product|
  @total << order_product.quantity * order_product.price
 end
 #@orderの持つorder_productの数だけ@totalという配列に各レコードの小計を<<でつっこんでいく
end
orders/show.html.erb
@total.inject{|sum, n| sum + n }

これだけ。最初配列をよく知らなくてめちゃくちゃ悩んだ。
送料でもつけたければ @total.inject{|sum, n| sum + n } + 送料 でもいい。
ただしそれをすると注文商品レコードが1つしか該当しない場合は反映されないので条件分岐が必要。

orders/show.html.erb
<% if @total.count = 1 %>
 <%= @total + 送料 %>
<% else %>
 <%= @total.inject{|sum, n| sum + n } + 送料 %>
<% end %>

こんな感じ。

これが例えば注文一覧に埋め込みたい場合は.findで定義付けできないのでhtmlにそのまま書き込む。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?