手动发送电子邮件路由

时间:2015-07-12 19:52:37

标签: ruby-on-rails ruby email

我一直在努力实现这个问题的代码:Send an email manually of a specific page in rails app

唯一的区别是我需要从我的模型中获取电子邮件地址。从模型发送电子邮件时,这通常没有问题。

UserMailer.report(self).deliver

但我想点击我的记录的节目视图中的按钮。

我需要使用电子邮件中记录的详细信息手动发送电子邮件。

也许有比使用额外控制器更好的方法吗?

# app/mailers/user_mailer.rb
class UserMailer < ActionMailer
  def report(thing)
    @thing = thing
    mail :to => thing.email, :from => 'you@example.com', 
      :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'

1 个答案:

答案 0 :(得分:0)

创建是rails中的post请求,你不能传递这样的参数,你需要从params获取。我看到你给它一个错误的参数。

其次你正在做@thing = thing然后你发送东西(没有@)来报告UserMailer的方法也是错误的,它在报告方法中会是nil。你应该在@thing是一个有电子邮件的对象之后做UserMailer.report(@ thing).deliver