Ruby on Rails:从显示页面发送电子邮件

时间:2012-04-24 04:22:10

标签: ruby-on-rails routes actionmailer

我是Rails noob,从显示页面发送电子邮件时遇到问题。有几个联系表单教程,但我找不到一个我从一个页面发送电子邮件,如'显示'页面。我相信我的路线有很大的错误。在模型中,我声明用户有多个促销活动,在促销展示页面上,我想允许current_user向@user发送电子邮件。

这里是app / mailers / quote_mailer.rb

class QuoteMailer < ActionMailer::Base
  default :from => "tim@example.com"

  def quote_mail(promotion)
    @user = user
    mail(:to => user.email, :subject => "You have an inquiry homeboy!")
  end 
end

在promotions_controller中,我把这个动作认为可能是错的:

def quotedeliver
  QuoteMailer.quote_mail.deliver
  flash[:notice] = 'report sent!'
  redirect_to root_path # or wherever
end

这是我用来发送电子邮件的表单(:url可能不对,但我不知道应该怎么看)

<%= form_for quote_mail, :url => quotedeliver_promotion_path(promotion), :html => {:method => :put } do |f| %>
  <%= f.text_area :body %>
  <%= f.submit %>
<% end %>

我希望得到一些帮助。我在stackoverflow上找不到类似的东西,我已经尝试了好几天。谢谢!

3 个答案:

答案 0 :(得分:2)

您可能错过了config / routes.rb中的路由

您可以将其定义为

post '/quotedeliver_promotion' => 'promotions#quotedeliver', :as => quotedeliver_promotion

请注意,quotedeliver必须重写quote_deliver以遵循ruby语法约定。当你打电话

QuoteMailer.quote_mail.deliver

你没有给出参数,所以试试这个

QuoteMailer.quote_mail(current_user).deliver

使用

更改您的方法
def quote_mail(user)
  mail ....
end

你们都很好

答案 1 :(得分:1)

有一些优秀的屏幕演员(通过Railscast)关于发送电子邮件http://railscasts.com/?tag_id=28

最后一点,不要将您的邮件发送方法附加到show动作(如果您当前正在进行),原因是show action仅用于查看某些内容而用户可能正在刷新该页面,因此如果您附加邮件程序为此,邮件可能每次刷新都会出去。

答案 2 :(得分:0)

def quote_mail(promotion)
   @user = user
  mail(:to => user.email, :subject => "You have an inquiry homeboy!")
end 

从您访问用户变量的位置,我认为应该是促销。