Ruby on rails 前过滤器的问题

Ruby on rails 前过滤器的问题,ruby-on-rails,Ruby On Rails,请帮助我试着理解这里发生了什么: 我需要批准一个嵌套的代码段,但当我这样做时,它会说它找不到书。我认为这可能是路由的问题,因为浏览器中的URL与rake路由不匹配 如果有人能握住我的手,像你对孩子一样解释这一点:) 找不到没有ID的书 下面是带有代码段#approve和before#u过滤器的控制器 class SnippetsController < ApplicationController before_filter :authenticate_user! before

请帮助我试着理解这里发生了什么:

我需要批准一个嵌套的代码段,但当我这样做时,它会说它找不到书。我认为这可能是路由的问题,因为浏览器中的URL与rake路由不匹配

如果有人能握住我的手,像你对孩子一样解释这一点:)

找不到没有ID的书

下面是带有代码段#approve和before#u过滤器的控制器

   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
我目前在浏览器中有此功能../snippets/2/activate


呃。。。。不确定我的想法是否正确。

您正在向
snippets/:id/activate
发送一个
POST
请求,该请求调用
snippets#approve

在调用执行
@book=book.find(参数[:book\u id])
SnippetsController
的整个
代码段上,有一个
before\u filter
。因为您的路径是
snippets/:id/activate
params[:book\u id]
nil
,因此您将得到该错误


您需要更改
snippets#approve
路径以包含
book\u id
,或者将
book\u id
作为
POST
参数传递,以便您的before过滤器可以访问它。

这是唯一显示的路径吗?它与您指定的路线不匹配。如果它指向url(snippets/2/activate),则只会出现
params[:id]
,任何使用
params[:book_id]
查找
的尝试都会失败,因为它为零。好的,但我的应用程序的其他部分需要此筛选器。你能再解释一下我需要向过滤器添加什么才能让它通过吗?需要查看控制器代码的其余部分,create是成功的POST方法的正常结果。在创建
过滤器之前的
过滤器和创建
过滤器之前的
过滤器之间也有区别。看起来你把约定弄混了。很抱歉考虑到我的模型,我会添加完整的控制器代码。我想问题出在你的路线上。您是否可以添加有关书籍和片段的相关部分?我假设您在某个地方有类似于
“books/:book\u id/snippets/:id”
的东西,或者可能有一个嵌套的资源路径,这就是为什么您需要before\u过滤器的原因。感谢您的帮助,非常感谢。
post "books/:id/activate" => "books#approve", :as => "active_book"
  post "snippets/:id/activate" => "snippets#approve", :as => "active_snippet"