2017-04-06 7 views
0

私はRoRとSendgridを使って大量の電子メールを送信するWebアプリケーションを開発しています。 NoMethodError未定義のメソッド#ActionMailer :: MessageDeliveryのための `to_model ':0xa6e7980意味しましたか? to_yaml#<ActionMailer :: MessageDelivery:0xa6e7980>のための未定義メソッド `to_model '

電子メールは送信されて配信されますが、このエラーが表示されます。レールとルビーに新しいので、私は失われており、6時間近くインターネットを掘った後でもこのエラーを取り除くために何をすべきか分からないようです。 私のコードは次のとおりです。
1. test_mailer.rb

class TestMailer < ApplicationMailer 
    include SendGrid 
    sendgrid_enable :ganalytics, :opentrack 
    default from: '[email protected]' 

    def send_email(e_arr, s_arr) 
     @e_arr = e_arr 
     @s_arr = s_arr 
     headers['X-SMTPAPI'] = { :to => @e_arr }.to_json 
     mail(
      :to => "[email protected]", 
      :subject => "Hello User", 
     ).deliver 
    end 
end 

2. routes.rbを

Rails.application.routes.draw do 
     root 'static_pages#home' 
     get 'static_pages/home' 
     post 'static_pages/home', to: 'static_pages#func' 
    end 

3.static_pages_controller.rb

class StaticPagesController < ApplicationController 
     skip_before_action :verify_authenticity_token 
     def home 
     end 
     def func 
      postvar = params[:Emails]; 
      lines = postvar.split("\n"); 
      arr = []; 
      lines.each {|line| 
       arr.push(line.split("@")[0]); 
      } 
      redirect_to TestMailer.send_email(lines, arr) 
     end 
    end 

4. environment.rbに

# Load the Rails application. 
require_relative 'application' 

# Initialize the Rails application. 
Rails.application.initialize! 

ActionMailer::Base.smtp_settings = { 
    :address => "smtp.sendgrid.net", 
    :port => 25, 
    :domain => "abc.com", 
    :authentication => :plain, 
    :user_name => "xyz", 
    :password => "pqr" 
} 

screenshot of the error

+0

app/controllers/static_pages_controller.rb:12: 'func ' @Anthony –

答えて

0

メーラsend_mail機能はredirect_toできません。代わりに

redirect_to TestMailer.send_email(lines, arr) 

はちょうどあなたがメールを送信した後に行く、またはあなたがしたいビューをレンダリングしたいパスredirect_to別のラインで

TestMailer.send_email(lines, arr).deliver_now 

を行う、またはfuncだけであれば既存のアクションからのメソッド呼び出し、何もしないでアクションに戻ります。

+0

私はそれをやってみました。エラーは消えた。しかし、電子メールは今送信/配信されません。何がうまくいかないのですか? –

+0

あなたは 'deliver_now'する必要があります...私の編集された答えを見てください。 – SteveTurczyn

関連する問題