2012-08-01 47 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,這樣您就可以在沒有事件的情況下使用它。