¿Cómo generar un enlace de desuscripción para correos electrónicos de Actionmailer?
Tengo una tabla de CLIENTES con los campos de identificación, nombre y correo electrónico y les estoy enviando correos electrónicos utilizando ActionMailer con SMTP de terceros.
Ahora quiero que los clientes también tengan la opción de suscripción, así que agregué la columna "suscripción" con el valor predeterminado como verdadero.
Ahora, ¿cómo generar un enlace que se pueda colocar en la plantilla de correo de vistas para que cuando el usuario haga clic en él, el valor de la suscripción cambie a falso para que en el futuro el cliente no reciba ningún correo electrónico? Tenga en cuenta que estos clientes no son usuarios de la aplicación Rails, por lo que no puedo usar lo que se sugiere aquí.Rails 3.2 ActionMailer maneja el enlace de cancelación de suscripción en los correos electrónicos
Encontré este enlaceCómo generar un enlace para cancelar la suscripción del correo electrónico. También me pareció útil, pero pensé que podría ser en 3 años, podríamos haber obtenido una mejor solución
Aquí está mi código completo -
#client.rb
attr_accessible :name, :company, :email
belongs_to :user
has_many :email_ids
has_many :emails, :through => :email_ids
before_create :add_unsubscribe_hash
private
def add_unsubscribe_hash
self.unsubscribe_hash = SecureRandom.hex
end
Aquí está el archivo Clients_controller.rb
# clients_controller.rb
def new
@client = Client.new
respond_to do |format|
format.html
format.json { render json: @client }
format.js
end
end
def create
@client = current_user.clients.new(params[:client])
respond_to do |format|
if @client.save
@clients = current_user.clientss.all
format.html { redirect_to @client }
format.json { render json: @client }
format.js
else
@clients = current_user.clients.all
format.html { render action: "new" }
format.json { render json: @client.errors, status: :error }
format.js
end
end
end
def unsubscribe
@client = Client.find_by_unsubscribe_hash(params[:unsubscribe_hash])
@client.update_attribute(:subscription, false)
end
El código funciona bien para los registros existentes y la cancelación de la suscripción funciona perfectamente, solo tengo problemas para crear nuevos clientes.
He usado @client en el método de cancelación de suscripción ya que estoy usando este objeto en la plantilla client_mailer.rb (usando @client o simplemente usando el cliente, ¡ambos están funcionando!)
EDIT 2 - _form.html.erb
<%= simple_form_for(@client, :html => {class: 'form-horizontal'}) do |f| %>
<%= f.input :name, :label => "Full Name" %>
<%= f.input :company %>
<%= f.input :email %>
<%= f.button :submit, class: 'btn btn-success' %>
<% end %>
He copiado la pila de pistas completa enhttp://jsfiddle.net/icyborg7/dadGS/