Ajax call, no route matches?

I'm trying to use an AJAX call in my code, but I doesn't seem to be able to find the method I'm trying to call, am I missing something really obvious here??

I have a method dynamic_form in the TasksController class.

Here is the error I get back in the browser.

what route you have in form_for? does this happen when you submit the form?

Radhames Brito wrote:

what route you have in form_for? does this happen when you submit the form?

<%= form_for(@task, :task) do |f| -%>

Thanks

this wont build a route for the create action i think it should be

<%= form_for(@task) do |f| -%>

is either one or the other not both, you pass and instance or a symbol

also if this is rails 3 this wont be submited with ajax since it lacks the :remote=> true option and in rails 2.3 it should be form_remote_for

also your controller should respond to js.

Hi Radhames,

Thanks for your tips.

I changed to the <%= form_for(@task, :remote=> true) do |f| -%> format. (I'm using rails3)

I also made sure my controller responds to js. I'm still getting the same error:

"No route matches {:page=>nil, :ascending=>nil, :escape=>false, :per_page=>nil, :group_filter=>"0", :tab=>nil, :controller=>"tasks", :search=>{}, :search_filter=>nil, :action=>"dynamic_form", :column=>nil}"

Any other ideas?

Paul

Radhames Brito wrote:

"No route matches {:page=>nil, :ascending=>nil, :escape=>false,

:per_page=>nil, :group_filter=>“0”, :tab=>nil, :controller=>“tasks”,

:search=>{}, :search_filter=>nil, :action=>“dynamic_form”,

:column=>nil}"

Something is wrong since the shouldnt be a passing :page=>nil, :ascending=>nil,:per_page=>nil in the params , view the html code and check what action is been called in the html form tag, it should be calling your_controller_name/dynamic_form (the path i gave you was for a restful action like create and update not for a custom action like the one you have, sorry), what you have here is a custom action, but you can make it restful like this

resources :your_controller do  

  member do
    get :dynamic_form    <===== get since i assume this is a search method

  end
end

then you will have a new restful action and you can refer to it like this

form_for dynamic_form_your_controller_path, :remote=> true do |f|

it will work, just remember to change your_controller with the actual name of your controller, to make sure you can check it by typing rake routes.

Something is wrong since the shouldnt be a passing :page=>nil, :ascending=>nil,:per_page=>nil in the params , view the html code and check what action is been called in the html form tag, it should be calling your_controller_name/dynamic_form (the path i gave you was for a restful action like create and update not for a custom action like the one you have, sorry), what you have here is a custom action, but you can make it restful like this

Hi Radhames,

Its actually being called by the :onchange part of the form, using a remote function call like this:

:onchange => remote_function(:url => {:action => 'dynamic_form'}

Could i just assign values to the :page, :asceding and :per_page within this call?

Thanks for your help so far, I'm sure the solution will prove to be simple!!

Paul

I'm trying to use an AJAX call in my code, but I doesn't seem to be able to find the method I'm trying to call, am I missing something really obvious here??

What's in your routes file? You may need to add the dynamic_form action to the mapping defined there (see

or Ruby on Rails Guides: Rails Routing from the Outside In)

Fred

What's in your routes file? You may need to add the dynamic_form action to the mapping defined there (see Rails Routing from the Outside In — Ruby on Rails Guides or Ruby on Rails Guides: Rails Routing from the Outside In)

Fred

Hi Fred,

I've tried various different things in my routes file.

At the moment, this is what it contains:

match 'dynamic_form' => 'tasks#dynamic_form'

this is what rake routes gives back atm

task_dynamic_form /tasks/:task_id/dynamic_form(.:format) {:controller=>"tasks", :action=>"dynamic_form"}

Any help you might have is greatly appreciated!

Thanks,

Paul

:onchange => remote_function(:url => {:action => ‘dynamic_form’}

you should have said this in the first place, use jquery, with its live function is the unobstrusive way, then sent a getscript, return js.erb action.

If you need to now how to do this step by step, just have to post a bit more of your view code.

and the actions you want to call is can be access by task_dynamic_form_path

Radhames Brito wrote:

If you need to now how to do this step by step, just have to post a bit more of your view code.

and the actions you want to call is can be access by task_dynamic_form_path

Apologies Radhames, I did include it in my first post, but I guess i could have been more clear!

Here is my view code. What it basically is supposed to do is run a little bit of js that replaces some of html when the first drop down box is changed.

<%= form_for(@task, :remote=> true, :as=>:task, :url => tasks_path ) do |f| -%>

<p>   <%= f.label :title, 'New task:' %>   <%= f.text_field :title %>   <%= f.hidden_field :assigned_to_id, :value => current_user.id %>

<label for="user_selected_app">Application:</label> <%= select 'facet', 'value',Facets.application_list(["GBOSS", "J_GMISEMEATC" ] ),{}, :onchange => remote_function(:url => {:action => 'dynamic_form'} ) %>

<label for="user_selected_issuetype">Issue Type:</label><strong id = "user_selected_issuetype"> <%= select 'task', 'issue_type', options_for_select(@task.sti_issue_type_list(User.current_user.group.id), :selected => session[:default_task_issue_type]), {}, :onchange => "$('task_submit').simulate('click')" %> </strong>   <%= f.submit 'Create' %> <% end -%> </p>

you'd want /tasks/dynamic form I think or the member {post 'dynamic_form'} stuff - check the url that is generated

Fred

“$(‘task_submit’).simulate(‘click’)” %>

This here is the problem this is calling url => tasks_path because is working the same as the submit button and that is your index action dynamic_form in never called your logic is not rigth, but am going out to lunch now all help you in

while

Hey guys,

I managed to resolve this one. It turns out the line i had inserted in routes.rb was being affected by a 'members' statement before it, causing it to generate the wrong route. I simply moved the line ahead of this to resolve the issue, the AJAX call seems to work fine now.

Thanks for all your advice and tips,

Paul