请帮助我尝试了解这里发生的事情:
我需要批准一个嵌套代码段,但是当我这样做时说它找不到书。我认为这可能是路由的问题,因为浏览器中的URL与rake路由不匹配。
如果有人可以握住我的手并像对待孩子一样解释这一点:)
找不到没有ID的图书
下面是带有片段#enveve和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
现在我明白了,因为我正在做一个帖子,我的佣金路线就是这样说的。
/书籍/:book_id /片段/:ID(:格式)
以下是自定义路线的路线:
active_snippet POST / snippets /:id / activate(。:format)
这是我为book&amp;&amp; amp;的自定义路线摘要:批准
post "books/:id/activate" => "books#approve", :as => "active_book"
post "snippets/:id/activate" => "snippets#approve", :as => "active_snippet"
我目前在浏览器中有这个../ snippets / 2 / activate
呃....不确定我是否正确思考。
答案 0 :(得分:1)
您向POST
发送了snippets/:id/activate
个请求snippets#approve
。
整个before_filter
上有一个SnippetsController
调用find_book
来执行@book = Book.find(params[:book_id])
。由于您的路径为snippets/:id/activate
,params[:book_id]
为nil
,因此您会收到该错误。
您需要更改snippets#approve
路径以包含book_id
,或将book_id
作为POST
参数传递,以便您的过滤器可以访问它。