对于我使用Rails 5构建的个人网站,我试图实现发送联系表单的工作。我正在使用delayed_job_active_record gem。
我生成了一份工作ContactMessageJob:
app/jobs/contact_message_job.rb
class ContactMessageJob < ApplicationJob
queue_as :contact_message
def perform(message)
MessageMailer.send_message(message).deliver_now
end
end
然后在MessagesController中我在ContactMessageJob上调用perform_later方法:
app/controllers/messages_controller.rb
...
def create
@message = Message.new(message_params)
if @message.valid?
ContactMessageJob.perform_later(@message)
redirect_to contact_path, notice: "Your message has been sent."
else
flash[:alert] = "An error occured while delivering this message."
render :new
end
end
但是当我尝试通过联系表单发送消息时,我在执行ContactMessageJob.perform_later(@message)时遇到此错误:
ActiveJob::SerializationError at /contact
Unsupported argument type: Message
我使用ActiveJob有点新鲜,所以我不确定如何解决这个问题。任何建议都非常受欢迎。
我的回购邮件是:https://github.com/acandael/personalsite/tree/job
问候,
安东尼
答案 0 :(得分:0)
滑轨&#39; ActiveJob使用GlobalID进行序列化,GlobalID知道如何序列化原始值(字符串,数字)和ActiveRecord对象。您的Message类是GID无法序列化的基本模型。
您可能更容易选择直接传递message_params作业并从作业中使用它们
MessageMailer.send_message(message_params[:name], message_params[:email], message_params[:content]).deliver_later
*)您不需要contact_message_job.rb上的工作类,因为您可以使用deliver_later方法发送异步电子邮件