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'
如何從params中獲取? –
所以當創建動作被調用時,這意味着某些表單正在從視圖中提交,並且正在創建的東西以及您可以在創建動作中使用p參數創建的表單參數。所以在def create的下一行中執行p params。你會在Rails服務器日誌中看到報告的參數。然後創建@report = Report.new(params [:report]); report.save。如果電子郵件存在於報告對象中,請執行此操作。UserMailer.report(@report).deliver – Athar
請參閱第4點參數以瞭解操作及其工作方式。我認爲它會幫助你http://guides.rubyonrails.org/action_controller_overview.html – Athar