2011-08-12 14 views
9

mi configuración: Carriles 3.0.9, 1.9.2 RubíRails 3 form_for rutas anidadas de acción personalizada

que añaden una acción personalizada a una tarea recurso anidado.

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

rake routes muestra

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

En mi controlador,

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 

necesito para definir una forma para realizar la acción, esto es lo que tengo actualmente

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

Arroja un error o

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

También intentado añadir :method => "put" con el mismo error

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

alguien conoce la sintaxis correcta form_format para lograr esto?

Respuesta

22

En caso de que alguien quiere la respuesta, esto es lo que tenía que hacer

<%= form_for [@project, @task], :url => cancel_project_task_path(@project, @task) do |f| %> 

Me tomó demasiado tiempo para resolver esto, es de esperar que esto ayude a la siguiente desarrollador desprevenido.

+0

Gracias, perdí horas tratando de usar 'url: {action: my_action}' – constantine1

Cuestiones relacionadas