2012-02-16 9 views
0

有効なルートを持つオブジェクトを破棄することはできません。ブラウザはNo route matches [POST] "/blog/topics/3/posts/1"を返します。しかし、私は同じリソース上で他のすべてのアクションを実行できます。私のコントローラー、テンプレートはどのようにしてコンソールからオブジェクトを作成して破壊することができますか?ルートは存在しますが、オブジェクトを破棄することはできません。なぜですか?

保存時間-これらの空路はどちらか私の現在の設定の下では動作しません。

を削除しません、私のコントローラである:ここでは

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 

は私のテンプレートです:

<%= link_to 'Destroy', blog_topic_post_path(@topic, @post), method: :destroy, confirm: 'You Sure About This?' %> 

答えて

0

それはmethod: :deleteでなければなりません。

+0

私は動詞の動作を混乱させ、私を怠惰にしました。 – rhodee

3

あなたのlink_toが間違っている可能性があります。 RoR APIを見ると、link_toオプションは:method => :delete, :confirm => "Are you sure?"のようになります。 :fetch_topicはどちらか呼び出されませんので、あなたが、そのことについては@postまたは@topicを持っていないので、

また、あなたの:fetch_postフィルタは、アクションdestroyのために実行されません。

+0

''作成する '' POST'、 ''更新する '' PUT''、 '' destroy''を '' DELETE''するのは面倒です。 RESTセマンティクスとRailsセマンティクスは異なります。 – tadman

+0

@MrDanA私は 'except'フィルタを使用しています。これは明示的に記述されたものを除いてすべての動作に対してフィルタを実行します。 @ tadman真剣に。私は投稿をCRUDすることができましたが、今私は奇妙なエラーを取得します。私は今調査します。 – rhodee

+0

これは多くの人々を混乱させる。リンクは ':method =>:delete'ですが、コントローラメソッドは' destroy'です。いい答えだ。 –

関連する問題