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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

552閲覧

RailsのAction Mailerについて

show_kanazawa

総合スコア12

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/04 12:20

##やりたいこと
現在ECサイトの開発を行っており、購入時にお客様のメールアドレスに自動で購入確認メールを送る機能をRuby on RailsのActionMailerにて実装しております。
そこでメーラーでお客様にメールを送る内容に、購入された商品の情報を含めたいと考えております。

$ rails g mailer NotificationMailer

上記コマンドでmailerを作成し記述を行い、

notification_mailer.rbにて下記のように記載を行いました。

ruby

1def send_confirm_to_customer(customer) 2 @customer = customer 3 email_with_name = %("#{@customer.name} 様" <#{@customer.email}> ) 4 5 mail( 6 subject: "ご利用ありがとうございます", 7 to: email_with_name 8 ) do |format| 9 format.text 10 end 11 end

上記の中で@customerを定義しているのでもちろん、メールのフォーマットとなる、
send_confirm_to_customer.text.haml では
@customer.nameでお客様のお名前を呼び出すことができるかと思いますが、別モデルの商品の情報を呼び出す為に、上記1行目の

ruby

1def send_confirm_to_customer(customer) 2...

の部分で(customer)の引数を二つにすることはできるのでしょうか。
引数を二つにしてカートの中身の商品情報をメールに乗せて送りたいと考えております。


DBのテーブル構成は下記のようになります。

######purchaseテーブル (購入情報管理)

idcustomer_idcart_id

has_one :cart, dependent: :destroy
belongs_to :customer

customersテーブル (顧客情報管理)
idnameemail

has_many :purchases, dependent: :nullify

cartsテーブル (カートを管理)

idのみ
has_many :cart_items, dependent: :destroy

cart_itemsテーブル (カートの中身の商品を管理)

|id|product_id|cart_id||quantity(個数)|
|:--|:--:|--:|:--|

belongs_to :product
belongs_to :cart

##考えたこと
実際にはセッションを利用して現在のカートを管理する為、current_cartを定義しております。

ruby

1def send_confirm_to_customer(customer) 2...

このcustomerの引数を二つにして(purchase)などを使いそこから、購入情報となる商品の中身をeachメソットなどを使い表示させるなどできないか考えましたが、うまくいかず。。

どうかいい方法あればご教授いただきたいです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

controllerで

NotificationMailer.send_cache_confirm_to_customer(@customer, @cart_items).deliver

のように引数を二つわたし、notification.rbにて

send_confirm_to_customer(customer, cart_items)

のように受け取ることで、無事解決ができました。

投稿2020/05/04 17:00

show_kanazawa

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問