Dan*_*ski 4 ruby ruby-on-rails
我已经创建了一个小应用程序来学习RoR.(图书数据库)它由只读区域和读写管理区域组成.
在我首先使用管理功能之后,我已将控制器移动到子目录中并创建了只读控制器.
现在,当我在管理区域更新书籍时,该redirect_to功能会重定向到只读区域.
我错过了什么?
这是我正在使用的代码:
class Admin::BooksController < ApplicationController
<snip>
def update
@book = Book.find params[:id]
respond_to do |format|
if @book.update_attributes params[:book]
flash[:notice] = "Book updated"
format.html { redirect_to @book }
format.xml { head :ok }
else
<snip>
end
end
end
<snip>
end
Run Code Online (Sandbox Code Playgroud)
此更新本身有效,但它重定向到我/books/1,但我希望它重定向到/admin/books/1.我可以硬编码正确的路径,但我想这不是很好的风格.
什么是正确的方法?
PS:如果您需要更多信息,请发表评论.
你告诉它重定向到书,因为你正在使用rails内置神奇的识别它应该对@book对象做什么(这是建立一个使用书籍控制器显示书籍的URL.
format.html { redirect_to @book }
Run Code Online (Sandbox Code Playgroud)
如果你想要它去其他地方,你需要明确你想要它去哪里使用哈希 url_for
format.html { redirect_to :controller => 'admin/book', :action => 'show', :id => @book }
Run Code Online (Sandbox Code Playgroud)
或者使用像klew指出的路径.
所以更多细节 -
redirect_to (@book) 要么
redirect_to book_path(@book)
Run Code Online (Sandbox Code Playgroud)
都是这个的捷径:
redirect_to :controller => book, :action => 'show', :id => @book.id