ile deliver_later kullanarak. Ancak, delivery_later nesneyi serileştirmeye çalıştığı ve her seferinde başarısız olduğu için yalnızca delivery_now'un çalışmasını sağlayabiliyorum. İşte Raylar 4.2: Ben kurulum için Raylar 4.2 en deliver_later yöntemini kullanarak bir iletişim formu çalışıyorum bir tablosuz modeli
benim Kurulum: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
çağrılırken alıyorum hatadır:
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
İdeal Bunun bir arka plan işlemi olmak istiyorum. Yakında Sidekiq gibi bir şey ekleyeceğim ama sanırım en iyisi bu serileştirme problemini önceden düzeltmek.
Herhangi bir yardım için teşekkür ederiz! Thanks :) AJ geçmeden önce nesne seri ve mailler serisini gerekir
Sadece ActiveRecord ve onun temelini kullanarak bitti. – DaniG2k
@ DaniG2k ActiveRecord'u tableless modelle nasıl kullandınız? – Marklar
@Marklar Sanırım altta yatan bir tablo kullandığını söylüyor. – Nick