2010-09-21 13 views
18

Questo sembra incredibilmente simile a una domanda alla quale avevo risposto solo pochi giorni fa, ma la soluzione non funziona ora.button_to: action => 'destroy' cerca 'show'

Sto costruendo un'applicazione per i binari e sto provando ad avere un pulsante per attivare un distruggi in un altro controller.

il codice che ho per il pulsante è

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

quando si fa clic sul pulsante Elimina, ho un 'Nessuna corrispondenza per i pasti/3', che è il meal_id corrente.

la distruggerà nei pasti di controllo simile a questa

 
    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 

sembra come se il button_to è completamente ignorando il: azione e la richiesta di spettacolo che non esiste e non deve esistere.

+0

quale versione di rota usi? – shingara

+0

Sto usando rails3 – pedalpete

risposta

35

E come si parte di routes.rb per quello che assomiglia? Perché se si utilizza map.resources allora destroy ha lo stesso percorso di show ma :method => :delete (che è un verbo virtuale implementato da form e _method = delete param).

Prova questo:

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

o se recipe è un'istanza della classe Meal poi

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

mente le parentesi graffe.

+0

Non sono del tutto sicuro di quello che stai dicendo. il mio percorso è "risorse: pasti". Ho cambiato: metodo =>: post a: method =>: delete ma per qualche motivo che ora sta puntando a creare – pedalpete

+0

se hai risorse: pasti allora ': id' è previsto per route, non': recipe_id'. Basta eseguire le rotte di rake per vedere quali rotte sono registrate. – gertas

+0

Ho rimosso il recipe_id da button_to, ma ho ancora lo stesso errore di route/"pasti/3". Ho percorso rotte di rastrello e il mio percorso pasti ha "pasto DELETE /meals/:id(.:format) {: action =>" destroy ",: controller =>" meals "}. Il mio pulsante_per l'azione è" pasti/3 ? method = delete ", che mi sembra giusto – pedalpete

10

So che è troppo tardi per una risposta, ma spero che possa aiutare qualcuno (usando Rails 4).

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