2011-09-10 67 views
2

在我的應用程序中,我有一個方法,收集所有Projects我有一個數組和使用each我顯示一個鏈接到正在訪問的用戶,該項目的鏈接。Rails 3 - 創建一個按鈕/鏈接發送電子郵件

那麼,我想要做的是創建一個按鈕或鏈接,除了這個鏈接到項目,使我能夠發送電子郵件給項目所有者。在這裏工作了一段時間,並在這裏得到了一些幫助,我發現我需要在我的Projects控制器中創建一個方法來調用我的Mailer中的方法。

但我認爲事情的發展方向可能不會起作用,那麼做到這一點的正確和最好的方法是:通過鏈接或按鈕向項目發送電子郵件以外的鏈接或按鈕?

這是我迄今所做的:

我創造了我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

我甚至不知道你可以生成一個mailer--路線記錄在哪裏?我一直有一個發送郵件的動作。 –

+0

正如我所說我有點困惑,並嘗試許多事情。但我想我現在走的是正確的路線,甚至認爲我得到了我提到的錯誤。檢查編輯。 – Luk

+0

如何渲染?鏈接不應該採取行動? –

回答

0

盧克,你正在設置這完全錯誤的方式。

您通常會通過標準控制器呈現表單。在表單提交時,創建操作將觸發發送電子郵件。我建議你從2.0到2.1.4閱讀how ActionMailer works;整個過程在那裏詳細描述。

通常還建議讓您的郵件程序數據庫支持,但您也可以放入ActiveModel等,併發送郵件,而無需將任何詳細信息保存到您的數據庫。

唯一額外的步驟就是想着縮放您的應用程序,如果你打算髮送大量的郵件(即Resque,beanstalkd等)

+0

如此直接:我如何創建一個鏈接在我想要的任何地方發送電子郵件? – Luk

+0

假設你有一個ContactUsController。您的link_to將指向您設置的任何路線,指向contact_us#new(您可以執行'rake routes'查看您的所有路線)。#new動作將呈現一個表單;創建操作很可能包含'ProfileMailer.member_alert(@email,@name).deliver'(注意實例變量)。 –

+0

我將再次編輯並顯示我如何做cuz我仍然收到錯誤。 – Luk

相關問題