-1

ここで何が起こっているのかを理解しようとするのを手伝ってください:

ネストされたスニペットを承認する必要がありますが、承認すると「本が見つかりません」と表示されます。ブラウザの URL が rake ルートと一致しないため、ルートに問題がある可能性があると思います。

誰かが私の手を握って、あなたが子供にするようにこれを説明できたら:)

ID のない書籍が見つかりませんでした

以下は、snippets#approve と before_filter を含むコントローラーです。

   class SnippetsController < ApplicationController
  before_filter :authenticate_user!
  before_filter :find_book


   def create
  #raise params.inspect
   @snippet = @book.snippets.create(params[:snippet])
   @snippet.user = current_user
     if @snippet.save
      redirect_to @book
      flash[:success] = "Snippet submitted and awaiting approval."
    else
      flash[:base] = "Someone else has submitted a snippet, please try again later"
      redirect_to @book
   end
 end     


  def approve
   #raise params.inspect
    @snippet = @book.snippets.find(params[:id])
    @snippet.update_attribute(:approved, true)
    redirect_to admins_path

end

  def edit
    @snippet = @book.snippets.find(params[:id])
  end    

  def update
    @snippet = @book.snippets.find(params[:id])

    respond_to do |format|
      if @snippet.update_attributes(params[:snippet])
        format.html { redirect_to @book, notice: 'Comment was successfully updated.' }
      else
        format.html { render action: "edit" }
      end
    end
  end

  private

  def find_book
    #raise params.inspect
    @book = Book.find(params[:book_id])


  end
end

今、私は投稿をしているので、レーキルートがこれを言っていることを理解しています。

/books/:book_id/snippets/:id(.:format)

カスタムルートのルートは次のとおりです。

active_snippet POST /snippets/:id/activate(.:format)

これは、book && snippet :approval のカスタム ルートです。

post "books/:id/activate" => "books#approve", :as => "active_book"
  post "snippets/:id/activate" => "snippets#approve", :as => "active_snippet"

現在、ブラウザでこれを取得しています../snippets/2/activate

えーと....私の考えが正しいかどうかわかりません。

4

1 に答える 1

1

POSTにリクエストを送信してsnippets/:id/activateいますsnippets#approve

before_filter全体として、を実行するSnippetsControllerを呼び出す があります。あなたのパスは,であるため、そのエラーが発生しています。find_book@book = Book.find(params[:book_id])snippets/:id/activateparams[:book_id]nil

パスを変更してsnippets#approveを含めるか、 をパラメータとしてbook_id渡して before フィルタがアクセスできるようにする必要があります。book_idPOST

于 2013-10-29T00:40:59.927 に答える