Синтаксический вопрос для delayed_jobs и электронной почты - PullRequest
0 голосов
/ 14 сентября 2010

Я получаю красивую ошибку:

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>

Проблема в том, что я неправильно передаю переменную ... как мне сделать это правильно?

note: До того, как я реализовал delayed_jobs с params [: subject] и params [: editor1], он работал отлично, поэтому я должен как-то их сохранить.

Я пробовал это без Delayed_Jobs, и MassEmail.new даже не оставляет следа в моем журнале.

Я тоже попробовал это в моей консоли, и оно замерзло.

Должно быть что-то не так с mass_email.rb или вызовом в def perform

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Это категорически неверно, вы дали двум параметрам одно и то же имя:

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

Как теперь работает метод execute, на какой параметр вы ссылаетесь?

Вы можете попробовать что-то вродеэто

class MassEmail < Struct.new(:user, :subject, :editor1)
  def perform
    Notifier.deliver_email_blast(user, subject, editor1)
  end
end
0 голосов
/ 16 сентября 2010

Спасибо JigFox за то, что я правильно написал параметры.

И я не совсем уверен, почему это работает, но я переместил цикл в функцию 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
...