2017-01-28 12 views
0

私の個人用ウェブサイトをRails 5でビルドするために、私は連絡先フォームを送信するための仕事を実装しようとしています。私はdelayed_job_active_record gemを使用しています。Delayed_jobを実装しているActiveJobの問題

私は仕事の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(@メッセージ)を実行するとこのエラーが発生します。

ActiveJob::SerializationError at /contact 
Unsupported argument type: Message 

私はActiveJobを使うのがちょっと新しいので、どうすればこの問題を解決できるか分かりません。どんな提案も大歓迎です。

私のレポはである:https://github.com/acandael/personalsite/tree/job

挨拶、

アンソニー

答えて

0

RailsのActiveJobはGlobalIDとGlobalIDを使用して直列化は、プリミティブ値(文字列、数値)とのActiveRecordオブジェクトをシリアライズする方法を知っていません。あなたのMessageクラスは、GIDが直列化できない基本的なモデルです。あなたのための

おそらく簡単にオプションは、送ることができるようあなたはcontact_message_job.rb上のジョブ・クラスを必要としないmessage_params直接ジョブに渡し、ジョブ自体

MessageMailer.send_message(message_params[:name], message_params[:email], message_params[:content]).deliver_later 

*)からそれらを使用することですdeliver_laterメソッドを使用した非同期メール

関連する問題