2011-09-10 20 views
2

私のアプリでは、配列内にあるProjectsをすべて集めて使用する方法があります。eachこのプロジェクトへのリンクであるアクセスするユーザへのリンクを表示します。Rails 3 - 電子メールを送信するためのボタン/リンクを作成する

私がしたいことは、プロジェクトへのこのリンクの他に、プロジェクトオーナーに電子メールを送ることができるボタンまたはリンクを作成することです。これをしばらく参考にして助けを借りて、私のメーラーのメソッドを呼び出すために私のProjectsコントローラにメソッドを作成する必要があることを発見しました。

しかし、私は物事はおそらくうまくいかないと思うので、これを行うには正しい方法と最善の方法があります:それ以外のプロジェクトにメールを送るためのリンクやボタン?ここで

は、私がこれまでにやっていることです:

私は私のProjectsコントローラ内部のメソッドを作成しました:

def send_email(email, name) 
    ProfileMailer.member_alert(email, name).deliver 
    #redirect_to :root 
end 

そして、私のビュー上を:

<td><%= link_to "Send Email", send_email_projects_path(project.user.email, project.user.name) %></td> 

はまた、ルートを追加しました:

resources :projects do 
    collection do 
    post "send_email" 
    end 
end 

ということで、私のProfileMailer

def member_alert(email, name) 
    @email = email 
    @name = name 
    mail(:to => @email, :subject => "#{@name}") 
    end 

に私はおそらく私が挿入する各電子メールコマンドの新しいビュー・ページを作成する必要があります、と私は来て、おそらくより多くのを持って、私はこのISNを考えるなぜそれが」です最高の方法です。

+0

(すなわちbeanstalkdなどResque、)アプリケーションをスケーリングを考えている私も、あなたはmailer--へのルートを生成することができます知りませんでしたそれはどこに文書化されていますか?私はいつも電子メールを送った行動を取ってきました。 –

+0

私が言ったように、私はちょっと混乱して多くのことを試していました。しかし、私は正しいルートを取ったと思う、私が言及したエラーを得ると思った。チェックを編集しました。 – Luk

+0

これはどのようにレンダリングされますか?リンクをアクションにしてはいけませんか? –

答えて

0

ルーク、これについて完全に間違った方法を設定しています。

通常、標準コントローラを介してフォームをレンダリングします。フォームの送信時に、作成アクションが電子メールの送信をトリガーします。私はあなたが2.0から2.1.4までhow ActionMailer worksを読むことをお勧めします。プロセス全体が完全に詳述されています。

メーラーDBをバックアップすることをお勧めしますが、ActiveModelなどにドロップしてメールを送信することもでき、詳細はDBに保存されません。あなたがメールを大量に送信する予定がある場合

だけ余分なステップが

+0

直接的に:どのような場所でメールを送信するためのリンクを作成するにはどうしたらよいですか? – Luk

+0

あなたがContactUsControllerを持っているとしましょう。あなたのlink_toは、あなたが設定したどのルートを指してもcontact_us#newを指します(あなたのルートをすべて見るには 'rake routes'ができます)。#newアクションはフォームをレンダリングします。作成アクションには 'ProfileMailer.member_alert(@email、@name).deliver'(インスタンス変数に気付く)が含まれています。 –

+0

私はもう一度編集して、私はまだエラーが発生している私はcuzをやっている方法を示します。 – Luk

関連する問題