Hi,
This is my first post to this list, so apologies if anything is amiss.
After processing and AJAX PUT request to a custom method, I want to redirect_to the show method of another controller, but redirect_to is keeping the PUT verb, so I get sent to update instead.
Rails 3.2.2, ruby 1.9.3-p0
I have tasklists that have many tasks.
The tasks are a list, and after moving a task down in the list I want to redirect and show the parent tasklist:
Models:
class TaskList < ActiveRecord::Base
has_many :tasks, :order => ‘position asc’, :dependent => :destroy
end
class Task < ActiveRecord::Base
belongs_to :task_list
end
Controllers:
class TaskListsController < ApplicationController
def show
@task_list = TaskList.find(params[:id], :include => [:tasks])
end
end
class TasksController < ApplicationController
def move_task_down
@task = Task.find(params[:id])
respond_to do |format|
if @task.move_lower
format.js { redirect_to @task.task_list, :notice => t(‘task_lists.successfully_moved’) }
else
format.js { redirect_to @task.task_list, :alert => t(‘task_lists.error_move_task’) }
end
end
end
end
routes.rb:
resources :task_lists
put ‘tasks/:id/move_down’ => ‘tasks#move_task_down’, :as => ‘move_task_down’
In the log:
Started PUT “/tasks/406137300/move_down” for 127.0.0.1 at 2012-03-20 12:19:17
Processing by TasksController#move_task_down as JS
Parameters: {“id”=>“406137300”}
…
Redirected to http://localhost:3000/task_lists/1007688486
Started PUT “/task_lists/1007688486” for 127.0.0.1 at 2012-03-20 12:19:17
Processing by TaskListsController#update as JS
Parameters: {“id”=>“1007688486”}
As seen in the log above, the user is being properly redirected to /task_lists/xxxxxxx, but the verb is PUT instead of GET,
which routes to the update method of TaskListsController, instead of the show method, which is where I want to go…
what am I doing wrong?
Thanks,
Martin