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

Hor*_*ice 7 ruby ruby-on-rails ruby-on-rails-3

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

Nis*_*ant 18

redirect_to文档

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

所以,当一个人做的redirect_to(@book) @book是一个特定的记录id.

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

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

resources :books
Run Code Online (Sandbox Code Playgroud)

现在这条路线基本上被翻译为(你可以通过运行看到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
Run Code Online (Sandbox Code Playgroud)

注意book GET /books/:id books#show- 当你这样做时,它会匹配redirect_to(@book)