ID、名前、および電子メール フィールドを持つテーブル CLIENTS があり、サード パーティの SMTP を使用して ActionMailer を使用して電子メールを送信しています。
ここで、クライアントにもサブスクリプション オプションを持たせたいので、デフォルト値が true の「サブスクリプション」列を追加しました。
ビュー メーラー テンプレートに入れることができるリンクを生成して、ユーザーがそれをクリックすると、サブスクリプションの値が false に変更され、将来的にクライアントが電子メールを受信しないようにする方法を教えてください。これらのクライアントは私の Rails アプリのユーザーではないので、ここで提案されているものは使用できないことに注意してください。
このリンクを見つけて、電子メールの購読を解除するためのリンクを生成する方法も役に立ちましたが、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_mailer.rb テンプレートでこのオブジェクトを使用しているため、unsubscribe メソッドで @client を使用しました (@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/で完全なトラック スタックをコピーしました。