关于将实例变量传递给redirect_to方法的混淆.如Rails指南所示



我正在学习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的特定记录。

因此,关联记录(在本例中为@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"

相关内容

  • 没有找到相关文章

最新更新