2015-07-12 155 views
1

我一直在努力實現從這個問題的代碼:Send an email manually of a specific page in rails app手動發送電子郵件的Rails

唯一的區別是,我需要從我的模型獲取電子郵件地址。從模型發送電子郵件時通常沒有問題。

UserMailer.report(self).deliver 

但我想單擊我的記錄的顯示視圖中的按鈕。

我需要使用電子郵件中記錄的詳細信息手動發送電子郵件。

也許有比使用額外控制器更好的方法嗎?

# app/mailers/user_mailer.rb 
class UserMailer < ActionMailer 
    def report(thing) 
    @thing = thing 
    mail :to => thing.email, :from => '[email protected]', 
     :subject => 'that report you want' 
    end 
end 

# app/views/user_mailer/report.html.erb 
<h1>Report</h1> 
<p>Here is your <% @thing.customer_id %></p> 


# app/controllers/reports_controller.rb 
def create 
    UserMailer.report(@thing).deliver 
    flash[:notice] = 'report sent!' 
    redirect_to root_path # or wherever 
end 

# in a view 
<% form_tag(reports_path(@thing), :method => :post) do %> 
    <% submit_tag 'send report email' %> 
<% end %> 

我返回null與上面的代碼:

ArgumentError (wrong number of arguments (0 for 1)): 
app/controllers/reports_controller.rb:3:in `create' 

回答

0

創建是在軌道POST請求,你不能傳遞參數,這樣,你需要從PARAMS獲取。我看到你給它一個錯誤的參數。

其次,你正在做@thing =的事情,然後你正在發送的東西(無@)報告方法的UserMailer這也是錯誤的,這將是無報告方法。你應該在@thing是一個具有電子郵件的對象後執行UserMailer.report(@thing).deliver

+0

如何從params中獲取? –

+0

所以當創建動作被調用時,這意味着某些表單正在從視圖中提交,並且正在創建的東西以及您可以在創建動作中使用p參數創建的表單參數。所以在def create的下一行中執行p params。你會在Rails服務器日誌中看到報告的參數。然後創建@report = Report.new(params [:report]); report.save。如果電子郵件存在於報告對象中,請執行此操作。UserMailer.report(@report).deliver – Athar

+0

請參閱第4點參數以瞭解操作及其工作方式。我認爲它會幫助你http://guides.rubyonrails.org/action_controller_overview.html – Athar