关于将实例变量传递给redirect_to方法的困惑。 正如Rails指南中所见

我正在研究rails指南上的ruby,即http://guides.rubyonrails.org/layouts_and_rendering.html上的“布局和渲染”主题

我很困惑将实例变量传递给redirect_to方法。 这怎么可能? 我认为redirect_to与重定向到另一个网页或url有关。

在指南中给出的示例中,它说明如下:

2.2.2渲染动作视图

如果要在同一模板中呈现与不同操作对应的视图,可以使用带有视图名称的render:

 def update @book = Book.find(params[:id]) if @book.update_attributes(params[:book]) redirect_to(@book) else render "edit" end end 

渲染“编辑”完全有意义,它将再次渲染新forms。 但是redirect_to(@book)在世界上发生了什么? 究竟是什么呈现以及如何将书籍对象重定向到? 顺便说一句,书籍模型有专栏,名称,作者,页面等…

redirect_to文档

redirect_to(options = {},response_status = {})将浏览器重定向到选项中指定的目标。 记录 – 将通过使用选项调用url_for生成URL,该选项将引用该记录的命名URL。

因此,当redirect_to(@book) @book是具有id的特定记录时。

因此,相关记录(在本例中为@book) show方法用作模板。

除此之外,如果您查看定义这些路径的routes.rb文件,您会注意到

 resources :books 

现在这条路线基本上被翻译为(你可以通过运行rake routes看到)

  books GET /books(.:format) books#index POST /books(.:format) books#create new_book GET /books/new(.:format) books#new edit_book GET /books/:id/edit(.:format) books#edit book GET /books/:id(.:format) books#show PUT /books/:id(.:format) books#update DELETE /books/:id(.:format) books#destroy 

注意book GET /books/:id books#show – 当你执行redirect_to(@book)时会匹配

它会重定向到一本书,例如“/ books / 65”