2012-04-24 85 views
0

我是Rails noob,并且在显示页面发送电子邮件时遇到问题。这里有几个联系表格教程,但我找不到一个我从页面发送电子邮件的地方,比如'show'页面。我相信我的路线有很大的错误。在模型中,我声明用户有几个促销活动,并且在促销展示页面上,我希望允许current_user向@user发送电子邮件。Ruby on Rails:从显示页面发送电子邮件

这里是应用程序/邮寄/ quote_mailer.rb

class QuoteMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    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 

这里是我用来发送表单电子邮件(:网址可能是错误的,但我不知道它应该如何看)

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

我会爱一些帮助。在stackoverflow上我找不到任何东西,我一直在尝试几天。谢谢!

+0

请告诉我错误你越来越.. – 2012-04-24 04:45:21

+0

什么是你的smtp设置在development.rb? – 2012-04-24 05:24:22

回答

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 

改变你的方法,你都好

+0

感谢您的回答Albandiguer!我在促销中遇到了NoMethodError#show undefined method'quote_deliver_promotions_path'这是表单。我会爱你的帮助! <%= form_for @quote_mail,:url => quote_deliver_promotions_path(@user),:html => {:method =>:put} do | f | %> \t <%= f。text_area:主体%> \t \t \t \t <%= f.submit%> \t \t \t \t <% end %> – Tim 2012-04-25 02:54:55

+0

嗨,你可以在POST提交此表单。所以删除:html => {:method =>:put},如果你按照我的说法定义了路由,路径是quotedeliver_promotion_path,没有参数。用户被赋予控制器中的模型 – albandiguer 2012-04-29 23:27:51

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

从哪里访问用户变量,应该是我认为的提升。

1

可以ü后您收到此错误信息,而且还有关于发送电子邮件http://railscasts.com/?tag_id=28

和最后一件事,一些优秀的屏幕类型转换(通过railscasts),不要你的邮件发送方法连接到一个节目动作(如果你正在做的),原因是表演动作只是为了某种看法和用户可能会被刷新该页面,因此,如果您将一个邮件到,信件就可能出去每个刷新

欢呼

+0

感谢这个提示...基于这个信息我认为这意味着我将使用jquery模式来显示将存在于另一页上的邮件表单。 – Tim 2012-04-25 13:52:41

相关问题