In our recent project ,
we came across one scenario, where we had to pass an unsaved record as argument in background job.
As delayed_job doesn't allow unsaved AR objects as arguments
ref: delayed_job issue when deserialising arguments
we used serializing/deserialising approach for passing params.
class PassingData def serialize(data) Base64.encode64(Marshal.dump(data)) end def deserialize(serialized_data) serialized_data = Base64.decode64(serialized_data) Marshal.load serialized_data end end user_details = PassingData.serialize @user
where @user = user_data
Mailer.delay.order_process("order confirm", user_details) #send mail in background #mailer method def order_process(subject, user_details) user = PassingData.deserialize(user_details) ..... end