I am creating an ajax request and building the url as follows:
function submitYear(year){
new Ajax.Request('update_make/'+year, { method: 'get'});
}
When I am at the new action for my car_infos controller, http://localhost:3000/car_infos/new this Ajax request works fine. I get a request that says:
Started GET “/car_infos/car_infos/update_make/2011”
The route matches up and all is well. However, if there is an error in the create the url becomes http://localhost:3000/car_infos and then when my ajax request triggers I get this with a routing error:
Started GET “/update_make/2002”
No route matches “/update_make/2002”
Here is what happens in my controller when create fails:
format.html { render :action => "new" }
I understand why I am getting the routing error, because I don’t have a route set up as /update_make/. Here is my route.
match 'car_infos/update_make/:year', :controller => 'car_infos', :action => 'update_make'
So two questions.
-
Why does my get request change when the url changes from car_infos/new to car_infos
-
How do I resolve this so when I create the url in the javascript it works for both cases? I don’t think putting a route for /update_make is the answer. If I redirect to /new then I lose the field values and the error message.
Thanks,
You’re sending your ajax request to a relative path, so if your browser location path changes the request path changes too. The browser location path could be changing because of a redirect in Rails or in javascript.
Is this a typo (the 2x “/car_infos”)?
You could spell out the absolute url in your javascript: