Routing error: no route matches contoller works. Route exists though

I have a fairly straight forward rails app, version 3.2. When I try to
create a Work instance, with deliberately invalid fields from a form, I
get a routing error:

    No route matches {:controller=>"works"}

This does not happen when I try the same test with an update on a Work
instance. After an attempted update I get the edit.html.erb page
rendered with the invalid fields highlighted.

I dont understand why after failing the save in the controller and
trying to render "new" it would give me a route matching error. Any
ideas?

Attached are my model, controller and routes.rb

Attachments:
http://www.ruby-forum.com/attachment/7456/routes.rb
http://www.ruby-forum.com/attachment/7457/work.rb
http://www.ruby-forum.com/attachment/7458/works_controller.rb

Yes - look at the log for that request :slight_smile:

Hassan Schroeder wrote in post #1063180:

I dont understand why after failing the save in the controller and
trying to render "new" it would give me a route matching error. Any
ideas?

Yes - look at the log for that request :slight_smile:

--
Hassan Schroeder ------------------------ hassan.schroeder@gmail.com
http://about.me/hassanschroeder
twitter: @hassan

Hassan,

I don't see anything in the logs that explains the routing error. The
controller is redirecting the failed save to the "new" view using
render. There shouldn't be any routing issues here.

Here is the log entry for this action: (sanitized a bit to read)

Started POST "/works" for 127.0.0.1 at 2012-06-05 12:04:18 -0500
Processing by WorksController#create as HTML
Parameters: {"utf8"=>"?",
"authenticity_token"=>"vrAsdpq9G04to6SgW5HNvb5NWcN8rPCy01ZwKK95lhM=",
"work"=>{"start(1i)"=>"2012", "start(2i)"=>"6", "start(3i)"=>"5",
"start(4i)"=>"17", "start(5i)"=>"04", "end(1i)"=>"2012", "end(2i)"=>"6",
"end(3i)"=>"5", "end(4i)"=>"17", "end(5i)"=>"04", "good"=>"", "bad"=>"",
"operation"=>"1", "work_ticket_id"=>"8", "shift_id"=>"1",
"operator_id"=>"1", "machine_id"=>"1"}, "commit"=>"Create Work"}
In start_must_be_before_end_time
In start_must_be_before_end_time
In start_must_be_before_end_time
In start_must_be_before_end_time
@work.save: false
@work.errors.count: 2

  Rendered works/_form.html.erb (62.5ms)
  Rendered works/new.html.erb within layouts/application (62.5ms)
Completed 500 Internal Server Error in 156ms

ActionController::RoutingError (No route matches
{:controller=>"works"}):
  app/views/works/new.html.erb:5:in
`_app_views_works_new_html_erb__545664482_19220532'
  app/controllers/works_controller.rb:136:in `block (2 levels) in
create'
  app/controllers/works_controller.rb:127:in `create'

  Rendered
c:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb
within rescues/layout (0.0ms)

Hassan Schroeder wrote in post #1063180:

I dont understand why after failing the save in the controller and

trying to render “new” it would give me a route matching error. Any

ideas?

Yes - look at the log for that request :slight_smile:

Hassan Schroeder ------------------------ hassan.schroeder@gmail.com

http://about.me/hassanschroeder

twitter: @hassan

Hassan,

I don’t see anything in the logs that explains the routing error. The

controller is redirecting the failed save to the “new” view using

render. There shouldn’t be any routing issues here.

Here is the log entry for this action: (sanitized a bit to read)

Started POST “/works” for 127.0.0.1 at 2012-06-05 12:04:18 -0500

Processing by WorksController#create as HTML

Parameters: {“utf8”=>"?",

“authenticity_token”=>“vrAsdpq9G04to6SgW5HNvb5NWcN8rPCy01ZwKK95lhM=”,

“work”=>{“start(1i)”=>“2012”, “start(2i)”=>“6”, “start(3i)”=>“5”,

“start(4i)”=>“17”, “start(5i)”=>“04”, “end(1i)”=>“2012”, “end(2i)”=>“6”,

“end(3i)”=>“5”, “end(4i)”=>“17”, “end(5i)”=>“04”, “good”=>"", “bad”=>"",

“operation”=>“1”, “work_ticket_id”=>“8”, “shift_id”=>“1”,

“operator_id”=>“1”, “machine_id”=>“1”}, “commit”=>“Create Work”}

In start_must_be_before_end_time

In start_must_be_before_end_time

In start_must_be_before_end_time

In start_must_be_before_end_time

@work.save: false

@work.errors.count: 2

Rendered works/_form.html.erb (62.5ms)

Rendered works/new.html.erb within layouts/application (62.5ms)

Completed 500 Internal Server Error in 156ms

ActionController::RoutingError (No route matches

{:controller=>“works”}):

app/views/works/new.html.erb:5:in

So the error is on on line 5 of your new.html. What does that line look like?

Martyn W. wrote in post #1063175:

I have a fairly straight forward rails app, version 3.2. When I try to
create a Work instance, with deliberately invalid fields from a form, I
get a routing error:

    No route matches {:controller=>"works"}

This does not happen when I try the same test with an update on a Work
instance. After an attempted update I get the edit.html.erb page
rendered with the invalid fields highlighted.

I dont understand why after failing the save in the controller and
trying to render "new" it would give me a route matching error. Any
ideas?

Attached are my model, controller and routes.rb

So, it was a link in the new.htnl.erb file referencing a list of works
through the associated workticket. I guess I need to reassign the
workticket parameter for the failed save render.