我正在学习rubyonrails指南,即http://guides.rubyonrails.org/layouts_and_rendering.html上的"布局和渲染"主题
我对将实例变量传递给redirect_to
方法感到困惑。这怎么可能呢?我认为redirect_to
将与重定向到另一个网页或url相关。
在指南中给出的例子中,它说:
2.2.2呈现动作视图如果你想呈现对应于不同动作的视图在同一个模板中,您可以使用的渲染名称观点:
def update @book = Book.find(params[:id]) if @book.update_attributes(params[:book]) redirect_to(@book) else render "edit" end end
渲染"edit"是完全有意义的,它将再次渲染新表单。但是redirect_to(@book)
到底是怎么回事?这将呈现什么,图书对象将如何被重定向到?顺便说一下,图书模型有列,名称,作者,页面等。
redirect_to documentation
redirect_to(options = {}, response_status = {}浏览器到选项中指定的目标。记录 -通过调用生成URLurl_for的选项,它将引用一个命名的URL记录。
因此,当执行redirect_to(@book)
时,@book
是具有id
的特定记录。
除此之外,如果你查看定义这些路径的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"