我创建了一个小应用程序来学习 RoR。 (图书数据库)由只读区和读写管理区组成。
在我首先使用管理功能之后,我将 Controller 移动到一个子目录中并创建了只读 Controller 。
现在,当我在管理区域更新一本书时,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
此更新本身有效,但它将我重定向到
/books/1
,但我希望它重定向到 /admin/books/1
。我可以硬编码正确的路径,但我想这不是很好的风格。什么是正确的方法?
PS:如果您需要更多信息,请发表评论。
最佳答案
您告诉它重定向到 book,因为您正在使用 rails 的内置魔法识别它应该对 @book 对象执行的操作(这是构建一个 url 以使用 book Controller 显示这本书。
format.html { redirect_to @book }
如果你想让它去其他地方,你需要使用
url_for
的散列明确说明你想要它去哪里format.html { redirect_to :controller => 'admin/book', :action => 'show', :id => @book }
或使用像 klew 指出的路径。
所以更多细节 -
redirect_to (@book)
或redirect_to book_path(@book)
这两个快捷方式:
redirect_to :controller => book, :action => 'show', :id => @book.id
关于ruby-on-rails - 如果我在不同的子目录中有多个 Controller ,我该如何使用 redirect_to?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/693059/