Rails 3 form_for вложенных маршрутов для настраиваемого действия

Моя настройка: Rails 3.0.9, Ruby 1.9.2

Я добавил настраиваемое действие к вложенному ресурсу задача.

routes.rb
resources :tasks
resources :projects do
  resources :tasks, :constraints => { :protocol => "http" } do 
    put :cancel, :on => :member
  end 
end

rake routes показывает

cancel_project_task PUT /projects/:task_id/tasks/:id/cancel(.:format) {:protocol=>"http", :action=>"cancel", :controller=>"tasks"}

В моем контроллере,

tasks_controller.rb  
  def cancel
    @task = Task.find(params[:id])

    respond_to do |format|
      if @task.cancel
        format.html { redirect_to(@task, :notice => 'Task was successfully canceled.') }
      else
        format.html { render :action => "edit" }
      end
    end
  end

мне нужно определить форму для выполнения действия, вот что у меня есть сейчас

_form.html.erb for subscription
  <%= form_for [@project, @task], :url => { :action => 'cancel' } do |f| %>
    <%= f.submit "Cancel your task"%> 
  <% end %>

Выдает ошибку

No route matches {:action=>"cancel", :controller=>"tasks"}

Я также пробовал добавление : method => "put" с той же ошибкой

_form.html.erb for subscription
  <%= form_for [@project, @task], :url => { :action => 'cancel', :method => "put" } do |f| %>
    <%= f.submit "Cancel your task"%> 
  <% end %>

Кто-нибудь знает правильный синтаксис form_format для этого?

9
задан Bob 12 August 2011 в 21:46
поделиться