0

レール初心者!!! 「送信」ボタンでメールを送信する関数 (sendmail) を呼び出すにはどうすればよいですか? これは私がこれまでに持っているものです.... events_controller の sendmail は呼び出されません! モデルにイベントがあり、Rails 3.2.3 を実行しています。

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 %>

ルート.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: "from@example.com"
  def results_email
    puts "RESULTS EMAIL"
    #NEVER GETS THIS FAR.....
  end
end
4

1 に答える 1

0

まず最初に。あなたはアクションをブロックroutes.rbの中に入れました。これにより、次のようなルートが生成されます。 sendmailmember

/events/:id/sendmail

sendmail アクションが一般的で、単一の「イベント」に適用する必要がない場合は、collectionブロックに配置する必要があるため、ルートは次のようになります。

/events/sendmail

次に、rake routes | grep sendmailコンソールで実行すると、次のような出力が得られます。

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

この行が言っているのは、ルートが構成されておりsendmail_event_path、ビューなどの理解を容易にするために使用できる名前のヘルパールートメソッドがあるということです。したがって、ビューでは次のようになります。

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

送信ボタンをクリックすると、フォームはPOSTEDの sendmail アクションになりますevents_controller

ルートを にcollection変更し、 に変更して:post、イベントなしで使用できるようにすることをお勧めします。

于 2012-08-01T12:12:57.393 に答える