Como gerar um link de desinscrição para emails da Actionmailer?
Eu tenho uma tabela CLIENTES com campos de identificação, nome e e-mail e estou enviando e-mails usando o ActionMailer com SMTP de terceiros.
Agora eu quero que os clientes tenham opção de assinatura também, então eu adicionei a coluna "assinatura" com o valor padrão como verdadeiro.
Agora, como gerar um link que pode ser colocado no template de mailer views, quando o usuário clica nele, o valor da assinatura muda para false, então, no futuro, o cliente não recebe nenhum email? Note que esses clientes não são meus usuários de aplicativos rails, então não posso usar o que foi sugerido aquiRails 3.2 ActionMailer manipula o link de cancelamento de assinatura em emails
Achei esse linkcomo gerar link para cancelar a assinatura do email também que parecia útil, mas eu pensei que poderia estar em 3 anos, poderíamos ter uma solução melhor
Aqui está o meu 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
Aqui está o arquivo 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
O código está funcionando bem para os registros existentes e a desinscrição está funcionando perfeitamente, estou tendo problemas apenas para criar novos clientes.
Eu usei @client no método de cancelamento de inscrição, pois estou usando este objeto no modelo client_mailer.rb (usando @client ou apenas usando o cliente, ambos estão 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 %>
Eu copiei a pilha completa da trilha emhttp://jsfiddle.net/icyborg7/dadGS/