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

时间:2013-01-06 03:42:52

标签: ruby-on-rails ruby ruby-on-rails-3

我正在研究导轨指南上的红宝石,即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

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

2 个答案:

答案 0 :(得分:18)

redirect_to documentation

  

redirect_to(options = {},response_status = {})重定向   浏览器到选项中指定的目标。   记录 - 将通过调用生成URL   带有选项的url_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)

时会匹配

答案 1 :(得分:0)

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