jeudi 13 août 2015

Resque not recognising instance variables

I am using resque to send emails. The emails do not send if my mailer template contains any references to instance variables.

users_controller.rb

def create
  @user = User.new(user_params)
  if @user.save
    Resque.enqueue(SendActivationEmail, @user.id)
    flash[:info] = "Please check your email to activate your account."
    redirect_to root_url
  else
    render 'new'
  end
end

send_activation_email.rb

class SendActivationEmail
  @queue = :email_queue
  def self.perform(user_id)
    user = User.find(user_id)
    UserMailer.account_activation(user).deliver_now
  end
end

user_mailer.rb

class UserMailer < ApplicationMailer
  def account_activation(user)
    @new_user = user
    mail to: user.email, subject: "Account activation"
  end
end

account_activation.text.erb

Hi,

Welcome. Click on the link below to activate your account:

<%= edit_account_activation_url(@new_user.activation_token, email: @new_user.email) %>

The error recorded in resque web is: No route matches {:action=>"edit", :controller=>"account_activations", :email=>"user5@domain.com", :id=>nil} missing required keys: [:id]

The following will send when the link is removed...

account_activation.text.erb

Hi,

Welcome. Click on the link below to activate your account:



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire