我有一个带有 id、name 和 email 字段的表 CLIENTS,我正在使用带有 3rd 方 SMTP 的 ActionMailer 向他们发送电子邮件。
现在我希望客户也有订阅选项,所以我添加了默认值为 true 的“订阅”列。
现在如何生成一个可以放在视图邮件模板中的链接,这样当用户点击它时,订阅值会变为 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 %>