Skip to main content

Routing Error No route matches [POST] when submitting ActionMailer

Rails • Asked by Ben John Bagley

I have created a form but I'm having issues submitting the form, it's not getting the right route, I'm sure this is a simple fix, I'm just not seeing it.

Here are the relevant files:

new.html.erb

<%= content_for :title, "Orders & Returns" %>

<div class="title">
  <h1>Orders &amp; Returns</h1>
  <p>In order for us to initialise a return of any order, first we need some information.</p>
</div>

<%= simple_form_for("/orders_and_returns/thank_you") do |f| %>
  <%= f.input :order_number,
              error: false,
              label: false,
              required: true,
              placeholder: "Order Number" %>

  <%= f.input :billing_name,
              error: false,
              label: false,
              required: true,
              placeholder: "Billing Name" %>

  <%= f.input :email,
              error: false,
              label: false,
              required: true,
              placeholder: "Email Address" %>

  <%= f.input :message,
              as: :text,
              error: false,
              label: false,
              required: true,
              placeholder: "Why do you wish to initialise a return?" %>

  <div class="hidden">
    <%= f.input :nickname,
                label: false,
                required: false,
                placeholder: "Captcha" %>
  </div>

  <%= f.submit "Submit",
               class: "button-border center-100" %>
<% end %>

thank_you.html.erb

<% content_for :title, "Thank You" %>

<div class="title">
  <h3>Thank you for your message!</h3>
  <p>We shall get back to you soon.</p>
</div>

<section class="text-center">
  <%= link_to "Go back home", root_path %>
</section>

order_and_returns_controller.rb

class OrdersAndReturnsController < ApplicationController
  def new
  end

  def thank_you
    @order_name   =   params[:order_name]
    @billing_name =   params[:billing_name]
    @email        =   params[:email]
    @message      =   params[:message]

    OrdersAndReturnMailer.orders_and_returns(@order_number, @billing_name, @email, @message).deliver_now
  end
end

orders_and_return_mailer.rb

class OrdersAndReturnMailer < ApplicationMailer

  def orders_and_returns(order_number, billing_name, email, message)
    @order_number = order_number
    @billing_name = billing_name
    @email        = email
    @message      = message

    mail(
         from: email,
         to: ENV['order_email'],
         subject: "You have a new return query from #{email}"
         )
    end
  end

end

routes.rb

get 'orders_and_returns/new' => 'orders_and_returns#new'
post 'orders_and_returns/thank_you' => 'orders_and_returns#thank_you'

Not sure what I'm missing here, any help would be appreciated.

EDIT

All routes:

rails routes
                      Prefix Verb   URI Pattern                             Controller#Action
        new_customer_session GET    /customers/sign_in(.:format)            devise/sessions#new
            customer_session POST   /customers/sign_in(.:format)            devise/sessions#create
    destroy_customer_session DELETE /customers/sign_out(.:format)           devise/sessions#destroy
       new_customer_password GET    /customers/password/new(.:format)       devise/passwords#new
      edit_customer_password GET    /customers/password/edit(.:format)      devise/passwords#edit
           customer_password PATCH  /customers/password(.:format)           devise/passwords#update
                             PUT    /customers/password(.:format)           devise/passwords#update
                             POST   /customers/password(.:format)           devise/passwords#create
cancel_customer_registration GET    /customers/cancel(.:format)             devise/registrations#cancel
   new_customer_registration GET    /customers/sign_up(.:format)            devise/registrations#new
  edit_customer_registration GET    /customers/edit(.:format)               devise/registrations#edit
       customer_registration PATCH  /customers(.:format)                    devise/registrations#update
                             PUT    /customers(.:format)                    devise/registrations#update
                             DELETE /customers(.:format)                    devise/registrations#destroy
                             POST   /customers(.:format)                    devise/registrations#create
   new_customer_confirmation GET    /customers/confirmation/new(.:format)   devise/confirmations#new
       customer_confirmation GET    /customers/confirmation(.:format)       devise/confirmations#show
                             POST   /customers/confirmation(.:format)       devise/confirmations#create
         new_customer_unlock GET    /customers/unlock/new(.:format)         devise/unlocks#new
             customer_unlock GET    /customers/unlock(.:format)             devise/unlocks#show
                             POST   /customers/unlock(.:format)             devise/unlocks#create
                        root GET    /                                       landing#show
      orders_and_returns_new GET    /orders_and_returns/new(.:format)       orders_and_returns#new
orders_and_returns_thank_you POST   /orders_and_returns/thank_you(.:format) orders_and_returns#thank_you
                    contacts POST   /contacts(.:format)                     contacts#create
                 new_contact GET    /contacts/new(.:format)                 contacts#new
             dashboard_index GET    /dashboard(.:format)                    dashboard#index
                             POST   /dashboard(.:format)                    dashboard#create
               new_dashboard GET    /dashboard/new(.:format)                dashboard#new
              edit_dashboard GET    /dashboard/:id/edit(.:format)           dashboard#edit
                   dashboard GET    /dashboard/:id(.:format)                dashboard#show
                             PATCH  /dashboard/:id(.:format)                dashboard#update
                             PUT    /dashboard/:id(.:format)                dashboard#update
                             DELETE /dashboard/:id(.:format)                dashboard#destroy

EDIT 2 - Terminal Logs

Started POST "/orders_and_returns/new" for ::1 at 2017-04-21 22:18:12 +0100

ActionController::RoutingError (No route matches [POST] "/orders_and_returns/new"):

actionpack (5.0.2) lib/action_dispatch/middleware/debug_exceptions.rb:53:in `call'
web-console (3.4.0) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.4.0) lib/web_console/middleware.rb:28:in `block in call'
web-console (3.4.0) lib/web_console/middleware.rb:18:in `catch'
web-console (3.4.0) lib/web_console/middleware.rb:18:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.0.2) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.0.2) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.0.2) lib/active_support/tagged_logging.rb:69:in `block in tagged'
activesupport (5.0.2) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.0.2) lib/active_support/tagged_logging.rb:69:in `tagged'
railties (5.0.2) lib/rails/rack/logger.rb:24:in `call'
sprockets-rails (3.2.0) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/request_id.rb:24:in `call'
rack (2.0.1) lib/rack/method_override.rb:22:in `call'
rack (2.0.1) lib/rack/runtime.rb:22:in `call'
activesupport (5.0.2) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/static.rb:136:in `call'
rack (2.0.1) lib/rack/sendfile.rb:111:in `call'
railties (5.0.2) lib/rails/engine.rb:522:in `call'
puma (3.8.2) lib/puma/configuration.rb:224:in `call'
puma (3.8.2) lib/puma/server.rb:600:in `handle_request'
puma (3.8.2) lib/puma/server.rb:435:in `process_client'
puma (3.8.2) lib/puma/server.rb:299:in `block in run'
puma (3.8.2) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
  Rendering /Users/benclarke/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout
  Rendering /Users/benclarke/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /Users/benclarke/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.1ms)
  Rendered collection of /Users/benclarke/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/routes/_route.html.erb [34 times] (8.7ms)
  Rendered /Users/benclarke/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/routes/_table.html.erb (1.5ms)
  Rendering /Users/benclarke/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /Users/benclarke/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.6ms)
  Rendered /Users/benclarke/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout (98.0ms)

Switched back to using form_tag from the simple_form gem, this fixed the issue.


Login or Create An Account to join the conversation.

Subscribe to the newsletter

Join 22,346+ developers who get early access to new screencasts, articles, guides, updates, and more.

    By clicking this button, you agree to the GoRails Terms of Service and Privacy Policy.

    More of a social being? We're also on Twitter and YouTube.