Rails / Mailer - 发送电子邮件后的NoMethodError

时间:2013-07-11 01:02:54

标签: ruby-on-rails ruby ruby-on-rails-3 devise actionmailer

我对Rails相当新,所以这可能最终成为明显的东西;然而,我只是花了一天的时间来完成这个问题。

我有一个rails应用程序,我已经工作了一段时间,但是我今天才开始实现邮件程序。我在这里遵循Rails ActionMailer教程:http://guides.rubyonrails.org/v3.0.3/action_mailer_basics.html并且邮件程序在新的示例应用程序中正常工作。但是,当我在现有的rails应用程序(在开发环境中运行)中逐字重复这些步骤时,我收到以下错误。它在DB中创建条目,正确发送纯文本和文本。 HTML电子邮件和THEN会生成错误。我想在这里做的就是在创建新帐户时发送欢迎电子邮件,但当我尝试从任何控制器发送任何电子邮件时,我收到同样的错误。

我发送欢迎电子邮件后发现的具体错误是:

    Completed 500 Internal Server Error in 280ms

NoMethodError (undefined method `error' for true:TrueClass):
  app/controllers/musers_controller.rb:52:in `block in create'
  app/controllers/musers_controller.rb:50:in `create' 

请注意,为了不弄乱我现有的用户表,我创建了一个临时脚手架&邮件程序称为Muser,我计划删除一次,我相信它可以在我的用户桌面上正常工作。

代码

日志错误:

Started POST "/musers" for 127.0.0.1 at 2013-07-10 20:32:34 -0400
Processing by MusersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"OuoEmsjkAVBHZwqPO5b/O4eKw6iZBaLP6vUT6f9WCOI=", "muser"=>{"name"=>"New User", "email"=>"User@email.com"}, "commit"=>"Create"}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 1]]
   (0.1ms)  begin transaction
  SQL (0.6ms)  INSERT INTO "musers" ("created_at", "email", "name", "updated_at") VALUES (?, ?, ?, ?)  [["created_at", Thu, 11 Jul 2013 00:32:34 UTC +00:00], ["email", "User@email.com"], ["name", "New User"], ["updated_at", Thu, 11 Jul 2013 00:32:34 UTC +00:00]]
   (1.7ms)  commit transaction
  Rendered muser_mailer/registration_confirmation.html.erb (0.1ms)
  Rendered muser_mailer/registration_confirmation.text.erb (0.0ms)
Completed 500 Internal Server Error in 280ms

NoMethodError (undefined method `error' for true:TrueClass):
  app/controllers/musers_controller.rb:52:in `block in create'
  app/controllers/musers_controller.rb:50:in `create'


  Rendered /usr/local/rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.6ms)
  Rendered /usr/local/rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2.5ms)
  Rendered /usr/local/rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (15.3ms)

- 我应该注意50和50行。 musers_controller中的52个(生成此错误的地方)对应于'respond_to do'&以下控制器代码中的'MuserMailer .... .deliver'行.--

控制器操作:

# POST /musers
  # POST /musers.json
  def create
    @muser = Muser.new(params[:muser])

respond_to do |format|
  if @muser.save
    MuserMailer.registration_confirmation(@muser).deliver
    format.html { redirect_to @muser, notice: 'Muser was successfully created.' }
    format.json { render json: @muser, status: :created, location: @muser }
  else
    format.html { render action: "new" }
    format.json { render json: @muser.errors, status: :unprocessable_entity }
  end
end
  end

邮件程序:

class MuserMailer < ActionMailer::Base
   default from: "EmailAddress@Inter.net"

  def registration_confirmation(muser)
    @muser = muser
    mail(:to => muser.email, :subject => "Registered")
  end
end

我认为问题不在于我的smtp,邮件设置或变量,因为它确实添加到了DB&amp;正确发送电子邮件。如果我注释掉控制器中调用邮件操作的行,则错误消失,所以我认为问题不在于我的muser路由。这个未定义的方法'错误'为true:TrueClass 让我疯了。我最近在我的用户表上安装了Devise,所以我不知道这是否会导致问题?

由于缺乏一个更好的术语,感觉就像问题是Rails在发送电子邮件后想要如何路由;好像我需要在邮件程序结束时放置一个Return或指定路由,告诉服务器返回控制器操作。换句话说,我迷路了!

更新

以下是我正在使用的两个邮件程序视图文件。

registration_confirmation.html.erb

<h3><%= @muser.name %>! You sweet sweet fool!</h3>
<p>Thank you for registering!</p>

registration_confirmation.text.erb

Thank you for registering!

更新2

这是我的Muser模型:

class Muser < ActiveRecord::Base
  attr_accessible :email, :name

end

1 个答案:

答案 0 :(得分:3)

我解决了这个问题 - 我的config.action_mailer.logger = true文件中存在错误的行config/environments/development.rb导致问题。一旦删除,一切都很完美。

相关问题