我创建了一个小应用程序来学习 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/

10-16 00:22