

私は、今現在、mailerを使い、あるページに移動すると、メールが送信されるようにしたいと考えています。しかし、controllerの設定がうまくできていないこともあり、送ることができない状態にあります。もしわかる方がいらしたら、教えていただきたいです。

[![画像の説明をここに入力](https://i.stack.imgur.com/I8qaF.png)](https://i.stack.imgur.com/I8qaF.png)  
[![画像の説明をここに入力](https://i.stack.imgur.com/ru8Ga.png)](https://i.stack.imgur.com/ru8Ga.png)

* * *

controller/tourist/done.controller.rb

[code]

    def done
      TouristMailer.tourist_payment_mail(self).deliver_now
    end
    
[/code]

config/environment/development.rb

[code]

    config.consider_all_requests_local       = true
    config.action_controller.perform_caching = false
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
         address:              'smtp.gmail.com',
         port:                  587,
         domain:               'smtp.gmail.com',
         user_name:            '******@gmail.com',
         password:             '**********',
         authentication:       'plain',
         enable_starttls_auto:  true
       }
    
[/code]

application_mailer.rb

[code]

    class ApplicationMailer < ActionMailer::Base
      default from: "******@gmail.com"
      layout 'mailer'
    end
    
[/code]

model/tourist.rb

[code]

    class Tourist < ActiveRecord::Base
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable and :omniauthable
      after_create :send_welcome_mail
    
      def send_welcome_mail
         TouristMailer.tourist_welcome_mail(self).deliver_now
      end
    
      def tourist_payment_mail
         TouristMailer.tourist_payment_mail(self).deliver_now
      end
    
      has_many :guiders
    
      devise   :database_authenticatable, :registerable,
               :recoverable, :rememberable, :trackable, :validatable
    end
    
[/code]

tourist_mailer.rb

[code]

    class TouristMailer < ApplicationMailer
     default from: '<*******:@gmail.com>'
    
     def tourist_payment_mail(tourist)
         @tourist = tourist
         mail(
             from: '<******@gmail.com>',
             to:   '<#{@tourist.email}>',
             subject: 'お問い合わせ'
             )
     end
    
    end
    
[/code]

tourist_payment_mail.html.erb

[code]

    <html lang="ja">
     <head>
       <meta content="text/html; charset=UTF-8" />
     </head>
     <body>
       <h2><%= @tourist %> 様</h2>
       <hr />
       <p>
         こんにちは！ <%= @tourist %>さん！</p>
       <hr />
     </body>
    </html>
    
[/code]


CC BY-SA 4.0
2019-06-20T12:03:20.087
55943
2019-06-22T05:31:43.900
2019-06-22T05:31:43.900
9608
30829
question
ruby-on-rails ruby
mailerを実装しているのですが、メールが送れない状態にあります。


エラーメッセージに

[code]

    undefined method `email` for #<TouristsController:xxxxxxxxxxxxx>
    
[/code]

と出ていますので`Tourist`モデルではなく`TouristsCOntroller`自体を渡してしまっていることがわかります。

おそらく`controller/tourist/done.controller.rb`で`TouristsController`を定義してるため、`self`で`TouristsController`自体が参照されてしまっています。

`Tourist`モデルのどこかで`payment`に関する処理があると思いますので、その処理と紐付いた所から該当の`Tourist`インスタンスを呼び出してメールを作成してください。

できればプロジェクトのフォルダ構造がRailsの標準に沿わないよくわからないものになっていますので一度Ruby on Rails
Guideなどを通して読まれることをおすすめします。


CC BY-SA 4.0
2019-06-21T10:53:41.547
55976
2019-06-21T10:53:41.547
3271
55943
answer