Ask A Question

Notifications

You’re not receiving notifications from this thread.

Routing Error No route matches [POST] when submitting ActionMailer

Ben John Bagley asked in Rails

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)
Reply

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

Reply
Join the discussion
Create an account Log in

Want to stay up-to-date with Ruby on Rails?

Join 82,160+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.

    Screencast tutorials to help you learn Ruby on Rails, Javascript, Hotwire, Turbo, Stimulus.js, PostgreSQL, MySQL, Ubuntu, and more.

    © 2024 GoRails, LLC. All rights reserved.