2013-01-06 30 views
7

我學習上的Ruby on Rails導遊即「佈局和渲染」主題在http://guides.rubyonrails.org/layouts_and_rendering.html將實例變量傳遞給redirect_to方法時感到困惑。正如在Rails的導遊看到

我感到困惑的實例變量傳遞到redirect_to方法。這怎麼可能?我認爲redirect_to將與重定向到其他網頁或網址相關。

在引導給出的例子,它說以下內容:

2.2.2渲染動作的觀點

如果你想呈現對應於不同的操作 內的視圖相同的模板,你可以使用帶有 視圖的名稱渲染:

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

渲染「編輯」具有完全意義,它將再次渲染該新窗體。但是redirect_to(@book)在世界上發生了什麼?到底什麼是要呈現,以及如何書籍對象將被重定向到?順便說一句,這本書模型列,名稱,作者,頁數等..

回答

18

redirect_to documentation

redirect_to的( options = {},response_status = {})將 瀏覽器重定向到選項中指定的目標。 記錄 - 將通過調用 url_for生成URL,其中的選項將引用該記錄的指定URL。

所以,當一個做redirect_to(@book)@book是一個id特定的記錄。

因此,相關記錄(在本例中爲@book)顯示方法用作模板。

除了上面,如果你看一下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)

+0

優秀。非常感謝你! Chrystal清楚! –

+0

感謝!爲我清除它 –

0

它會重定向到一本書,如 「/書籍/ 65」

+0

假設URL是/ myapp/books/65和65通過params哈希傳遞,到底什麼是redirect_to(@book)。這會將我帶到顯示第65冊詳細信息的頁面?另外,有params [:book]的params哈希怎麼樣?這是什麼?包含所有記錄的表單發佈方法? –