Rails 4.2のdeliver_laterメソッドを使用して連絡先フォームを設定しようとしています。しかし、deliver_laterはオブジェクトを直列化しようとするたびに失敗するため、deliver_nowを動作させることしかできません。ここでRails 4.2:テーブルレスモデルでdeliver_laterを使用する
は私の設定です:
messages_controller.rb
class MessagesController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
ContactMailer.contact_form(@message).deliver_later
redirect_to root_path, notice: "Message sent! Thank you for contacting us."
else
render :new
end
end
end
contact_mailer.rb
class ContactMailer < ApplicationMailer
default :to => Rails.application.secrets['email']
def contact_form(msg)
@message = msg
mail(:subject => msg.subject, from: msg.email)
end
end
message.rb
class Message
include ActiveModel::Model
include ActiveModel::Conversion
## Not sure if this is needed ##
include ActiveModel::Serialization
extend ActiveModel::Naming
attr_accessor :name, :subject, :email, :body
validates_presence_of :email, :body
validates_format_of :email, with: /\A([^\s]+)((?:[-a-z0-9]\.)[a-z]{2,})\z/i
validates_length_of :body, :maximum => 1000
def initialize(attributes = {})
attributes.each { |name, value| send("#{name}=", value) }
end
## Not sure if this is needed ##
def attribtues
{'name' => nil, 'subject' => nil, 'email' => nil, 'body' => nil}
end
end
ContactMailer.contact_form(@message).deliver_later
を呼び出すときに私が得るエラーは次のとおりです。
ActiveJob::SerializationError in MessagesController#create
Unsupported argument type: Message
Extracted source (around line #10):
if @message.valid?
ContactMailer.contact_form(@message).deliver_later
redirect_to root_path, notice: "Message sent! Thank you for contacting us."
else
render :new
は、理想的には私は、これはバックグラウンドプロセスようにしたいと思います。私はすぐにSidekiqのようなものを追加する予定ですが、私はこのシリアル化の問題をあらかじめ解決しておくのが最善だと思います。
ご協力いただきましてありがとうございます。ありがとう:)
私はちょうど 'ActiveRecord'とその基礎を使用して終了しました。 – DaniG2k
@ DaniG2kどのようにテーブルレスモデルでActiveRecordを使用しましたか? – Marklar
@ Markl彼は彼が基礎となるテーブルを使用したと言っていると思います。 – Nick