- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Rails 4.2 的 Deliver_later 方法设置联系表格。但是,我只能让 Deliver_now 工作,因为 Deliver_later 试图序列化我的对象并且每次都失败。
这是我的设置:
消息 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
class ContactMailer < ApplicationMailer
default :to => Rails.application.secrets['email']
def contact_form(msg)
@message = msg
mail(:subject => msg.subject, from: msg.email)
end
end
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
最佳答案
避免必须使用 ActiveRecord 支持对象或创建不必要的表的简单解决方案:
除了将 Message 对象传递给 contact_form 方法之外,您还可以将消息参数传递给 contact_form 方法,然后在该方法中初始化 Message 对象。
这将解决问题而无需创建表,因为您正在延迟作业 worker 的内存空间中初始化对象。
例如:
消息 Controller .rb
MessagesController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
ContactMailer.contact_form(params[:message]).deliver_later
redirect_to root_path, notice: "Message sent! Thank you for contacting us."
else
render :new
end
end
end
class ContactMailer < ApplicationMailer
default :to => Rails.application.secrets['email']
def contact_form(msg_params)
@message = Message.new(msg_params)
mail(:subject => msg.subject, from: msg.email)
end
end
关于ruby-on-rails - rails 4.2 : using deliver_later with a tableless model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27898183/
尝试使用delayed_job_active_record升级到Rails 4.2。我没有为测试环境设置delayed_job后端,因为我认为这样作业会立即执行。 我正在尝试使用 RSpec 测试新的
我有一个 Ruby on Rails 应用程序,我需要在面试前一天向申请人发送提醒邮件。为此,我计划使用 The Rescue Scheduler,我使用的是 rails v 4.2。我已经运行了 r
升级到 Rails 6 后,我注意到默认邮件程序的 .deliver_later与 Rails 5 中的工作方式不同。 配置: config.active_job.queue_adapter = :i
我正在尝试使用 Rails 4.2 的 Deliver_later 方法设置联系表格。但是,我只能让 Deliver_now 工作,因为 Deliver_later 试图序列化我的对象并且每次都失败。
我有一个非常基本的邮件设置如下发送交易邮件: class PayoutMailer < ApplicationMailer default from: 'hello@groundworkai.co
什么有效 我当前的 user_controller.rb 代码: def create u = User.new(create_user_params) . . . if u.sa
我有一个 Rails 应用程序,其中有一个功能可以发送很多电子邮件。我想以异步方式 的方式进行,并且我认为 deliver_later 方法可以做到这一点。目前,从用户单击 submit 到提交表单,
我的生产应用程序在 AWS 上运行,但在某些邮件程序上的事件作业 - deliver_later 有问题。我在开发中成功发送了所有带有 deliver_later 的电子邮件,但在生产中有些不同。某些
与 ActiveJob 交互的常见模式在 Rails 中是使用 perform() 设置作业通过 perform_now 异步调用的方法或 perform_laterMailers特殊情况可直接调用d
我是一名优秀的程序员,十分优秀!