2010-09-21 14 views
18

Esto parece increíblemente similar a una pregunta que respondí hace unos días, pero la solución no está funcionando ahora.button_to: action => 'destroy' busca 'show'

Estoy construyendo una aplicación de rieles, y estoy tratando de tener un botón para disparar una destrucción en un controlador diferente.

el código que tengo para el botón es

 
<%= button_to "delete", :controller => :meals, 
          :action => 'destroy', 
          :recipe_id => recipe.id, 
          :method => :post > 

cuando haga clic en el botón de borrar, aparece un 'No hay coincidencias para comidas/3', que es el meal_id actual.

al destruir en las comidas controlador tiene este aspecto

 
    def destroy 
    @meal = Meal.where("current_user.id => ? AND recipe_id => ?", current_user.id, params[:recipe_id]).first 
    @meal.destroy 

    respond_to do |format| 
     format.html { redirect_to :controller => "user" , :action => "show" } 
     format.xml { head :ok } 
    end 
    end 

parece como si la button_to está ignorando por completo el: acción y solicitando muestran que no existe y no debe existir.

+0

cual versión de rieles usa? – shingara

+0

Estoy usando rails3 – pedalpete

Respuesta

35

¿Y qué parte de routes.rb tiene ese aspecto? Porque si usa map.resources entonces destroy tiene la misma ruta que show pero :method => :delete (que es un verbo virtual implementado por form y _method = delete param).

Prueba esto:

<%= button_to "delete", {:controller => :meals, 
     :action => 'destroy', :id => recipe.id }, :method => :delete %> 

o si es recipe instancia de clase, entonces Meal

<%= button_to "delete", @recipe, :method => :delete %> 

mente de las llaves.

+0

No estoy del todo seguro de lo que dices. mi ruta es "recursos: comidas". Cambié: method =>: post to: method =>: delete pero por algún motivo ahora apunta a crear – pedalpete

+0

si tuyo tiene recursos: meals then ': id' se espera por ruta, no': recipe_id'. Simplemente ejecute 'rutas de rastreo 'para ver qué rutas están registradas. – gertas

+0

Quité la receta_del botón_apero sigo obteniendo el mismo error de No ruta coincide "/ comidas/3". Ejecuté rutas de rake, y mi ruta de comidas tiene "meal DELETE /meals/:id(.:format) {: action =>" destroy ",: controller =>" meals "}. Mi botón para formar la acción es" meals/3 " ? method = delete ", que me parece correcto – pedalpete

10

Sé que es demasiado tarde para una respuesta, pero espero que pueda ayudar a alguien (usando Rails 4).

<%= button_to "delete", meal_path(:id => recipe.id), :method => :delete %> 
Cuestiones relacionadas