Как создать ссылку отмены подписки на электронные письма Actionmailer?
У меня есть таблица КЛИЕНТОВ с полями id, name и email, и я отправляю им электронные письма, используя ActionMailer со сторонним SMTP.
Теперь я хочу, чтобы у клиентов была опция подписки, поэтому я добавил столбец «подписка» со значением по умолчанию как true.
Теперь, как сгенерировать ссылку, которую можно поместить в шаблон почтовой программы views, чтобы, когда пользователь щелкает по ней, значение подписки меняется на false, чтобы в будущем клиент не получал электронную почту? Обратите внимание, что эти клиенты не являются пользователями моего приложения rails, поэтому я не могу использовать то, что было предложено здесь.Rails 3.2 ActionMailer обрабатывает ссылку для отмены подписки в электронных письмах
Я нашел эту ссылкукак сгенерировать ссылку для отписки от почты тоже выглядело полезным, но я подумал, что через 3 года мы могли бы найти лучшее решение
Вот мой полный код -
#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
Вот файл 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
Код работает нормально для существующих записей, и отписка работает отлично, у меня только проблемы с созданием новых клиентов.
Я использовал @client в методе отмены подписки, так как я использую этот объект в шаблоне client_mailer.rb (используя @client или просто используя клиент, оба работают!)
РЕДАКТИРОВАТЬ 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 %>
Я скопировал полный стек дорожек вhttp://jsfiddle.net/icyborg7/dadGS/