事前情報
現状のDBは下記画像の通りとなります
オーナーとカスタマーは自身のアカウントを1つ所有。
オーナーのアカウントはメールマガジンと1対多、カスタマーアカウントは支払い情報と1対多の関係にある。
オーナーアカウントとカスタマーアカウントは多対多の関係にあり、
account.members
でオーナーと紐付いている(※以下、メンバーとさせて頂きます)全てのカスタマーアカウントを取得できるよう設定。
#実現したいこと
メンバー宛に送るメールのステータス(全員: 1, 支払情報有り: 2, 支払情報無し: 3)によって、送り主を振り分けたい。
##実際のコード
mail_magazines_controller.rb
def create @mail_magazine = current_owner.account.mail_magazines.build(mail_magazine_params) if @mail_magazine.save MailMagazineMailer.creation_email(@mail_magazine, current_owner).deliver_now redirect_to root_url else render :new end end
mailer/mail_magazines_mailer.rb
def creation_email(mail_magazine, current_owner) @mail_magazine = mail_magazine customer_accounts = current_owner.account.members #メンバーを取得 if @mail_magazine.status == 1 #問題なし @customers = customer_accounts.map{|customer_account| customer_account.customer} elsif @mail_magazine.status == 2 #支払情報ありのメンバー宛 payments = customer_accounts.map{|customer_account| customer_account.payments.find_by(account_id: current_owner.account.id)} #各メンバーが所有している支払い情報からオーナーアカウントに該当する情報があれば取得 @customers = payments.map{|payment| payment.customer_account.customer } elsif @mail_magazine.status == 3 #支払情報無しのメンバー宛 end mail( subject: @mail_magazine.title, to: @customers.map{|customer| customer.email}, from: "***@***.com" ) end
####試したこと
Railsコンソールで確認
payments = Payment.all payments.map{|payment| payment.customer_account.customer } #問題なく取得化 owner = Owner.first customer_accounts = owner.account.members #メンバー取得 payments = customer_accounts.map{|customer_account| customer_account.payments.find_by(account_id: owner.account.id)} #各メンバーが所有している支払い情報からオーナーアカウントに該当する情報があれば取得 customers = payments.map{|payment| payment.customer_account.customer } #エラー 上記画像と同じく undefined method `customer_account' for nil:NilClass となる
mapメソッドで取得した情報は、再びmapメソッドを使うことができない?のでしょうか。
また、その他解決策等ご教示いただけますと幸いです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/04 04:57