2012-08-01 45 views
0

新的rails! 如何让我的“发送”按钮调用发送电子邮件的函数(sendmail)? 这是我到目前为止...... event_controller中的sendmail不会被调用! 我有一个事件在我的模型,我的运转轨道3.2.3rails - form_tag连接到自定义函数

show.html.erb:

<p><b>Send Results</b></p> 
<%= form_tag("/events", :method => "get") do %> 
<p><label for="email_recipient">Email recipient</label>: 
<%= text_field 'email', 'Email recipient' %></p> 
<%= submit_tag "Send" %> 
<% end %> 

的routes.rb:

resources :events do 
     member do 
      get '/sendmail', :as => :sendmail 
     end 
    end 

events_controller.rb

def sendmail 
     puts "sendmail" 
     Emailer.deliver_results_email 
     return if request.xhr? 
     render :text => 'Message sent successfully' 
    end 

emailer.rb

class Emailer < ActionMailer::Base 
    #default from: "[email protected]" 
    def results_email 
    puts "RESULTS EMAIL" 
    #NEVER GETS THIS FAR..... 
    end 
end 

回答

0

首先要做的事情。在您的routes.rb中,您已将sendmail操作放入member块中。这会产生这样的路线:

/events/:id/sendmail 

如果sendmail的动作是kindda通用的,并不需要一个独立的“事件”被应用,也许你应该把它放在一个collection块,所以你的路线会是这样:

/events/sendmail 

其次,如果您在控制台中运行rake routes | grep sendmail,你会得到这样的事情outputed:

sendmail_event GET /events/:id/sendmail events#sendmail 

什么这行我言说是,你必须配置的路由和你有一个帮手路线方法命名为sendmail_event_path,您可以使用,方便您的看法,等的了解,以便在您看来它会是这样的:

<%= form_tag sendmail_event_path(@event.id) %> 
    ... 
<% end %> 

当你点击提交按钮时,表单将会是POSTEDevents_controller的sendmail动作。

我建议您将您的路线更改为collection,并更改为:post,这样您就可以在没有事件的情况下使用它。