delayed_jobs和电子邮件的语法问题

时间:2010-09-14 16:01:01

标签: ruby-on-rails ruby actionmailer delayed-job

我收到了一个漂亮的错误:

failed with NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[] - 3 failed attempts

我的控制器:

CardSignup.all.each do |user|
  Delayed::Job.enqueue MassEmail.new(user, params[:subject], params[:editor1])
end

mass_email.rb

class MassEmail < Struct.new(:user, :subject, :message)
  def perform
    Notifier.deliver_email_blast(user, subject, message)
  end
end

_form.html.haml

- form_tag admin_email_blast_path do
  Subject
  %br
  = text_field_tag 'subject'
  %br
  Body
  %br
  = text_area_tag 'message', '', :name => 'editor1'
  %br
  = submit_tag 'Send Email', :class => 'button'

  :plain
    <script type="text/javascript">
    CKEDITOR.replace( 'editor1' );
    </script>

问题是因为我没有正确地传递varis ..我该怎么做呢?

注意:在我使用params [:subject]和params [:editor1]实现delayed_jobs之前,它工作得很好,所以我必须以某种方式保留它们。

我在没有Delayed_Jobs的情况下尝试了这个,而MassEmail.new甚至没有在我的日志中留下回溯。

我也在我的控制台中尝试了这个,它冻结了。

mass_email.rb或def perform中的来电

出现问题

2 个答案:

答案 0 :(得分:1)

这是明确错误的,你提供了两个相同名称的参数:

class MassEmail < Struct.new(:user, :params, :params)

现在执行方法如何引用你的参考?

您可以尝试这样的事情

class MassEmail < Struct.new(:user, :subject, :editor1)
  def perform
    Notifier.deliver_email_blast(user, subject, editor1)
  end
end

答案 1 :(得分:0)

感谢JigFox让我正确地写下了params。

我并不完全确定为什么会这样,但我将循环移到了MassEmail.new函数中。

Delayed::Job.enqueue MassEmail.new(params[:subject], params[:editor1])

class MassEmail < Struct.new(:subject, :editor1)
  def perform
    CardSignup.all.each do |user|
      Notifier.deliver_email_blast(user, subject, editor1)
    end
  end
end