Percorso presente, ma non può distruggere oggetti, perché?
-
26-10-2019 - |
Domanda
Non sono in grado di distruggere un oggetto con un percorso valido. ritorna browser No route matches [POST] "/blog/topics/3/posts/1"
. Tuttavia posso eseguire tutte le altre azioni sulla stessa risorsa. Come dovrebbe mio controller, modello sguardo dato che posso creare e distruggere l'oggetto dalla console?
Risparmio di tempo-queste vie non funzionano neanche sotto il mio config corrente:
- link_to ([@ argomento, @post]) restituisce http: // localhost :. 3000 / blog / argomenti / 3/1 / messaggi / 1
- link_to ([@ argomento]) restituisce http: // localhost: 3000 / blog / argomenti / 3 / messaggi / 1 . #Still non elimina
Qui è il mio controller:
class Blog::PostsController < ApplicationController
before_filter :fetch_topic, except: [:index]
before_filter :fetch_post, except: [:create, :new]
#stuff that works.
..
..
..
def destroy
@post.destroy
respond_to do |format|
format.html { redirect_to blog_topic_posts_url, notice: 'Post deleted.'}
end
#DOES NOT work: redirect_to root_url([:blog, @topic, @post]), notice: 'Post deleted.'
end
private
def fetch_post
@post = @topic.posts.find(params[:id])
end
def fetch_topic
@topic = Topic.find(params[:topic_id])
end
Qui è il mio modello:
<%= link_to 'Destroy', blog_topic_post_path(@topic, @post), method: :destroy, confirm: 'You Sure About This?' %>
Soluzione
Dovrebbe essere method: :delete
.
Altri suggerimenti
Credo che la vostra link_to potrebbe essere sbagliato. Guardando sul RoR API le opzioni link_to dovrebbe essere come :method => :delete, :confirm => "Are you sure?"
.
Inoltre, il filtro :fetch_post
non correre per l'azione destroy
, in modo da non avere @post
o @topic
per quella materia, perché :fetch_topic
non viene chiamato sia.