2012-05-16 117 views
0

我正在閱讀Beginning Rails 3.我有一個關於重定向的問題。該書指出「redirect_to也可以將對象作爲參數」與路徑進行比較。於是他們給的例子是,在Rails中重定向和路由

redirect_to(@article) 

是一條捷徑相當於

redirect_to(article_path(:id => @article)) 

我不知道我理解這一點。這一行究竟是什麼:id => @article說?

感謝, 麥克

回答

1

redirect_to(@article)redirect_to(article_path(@article))的快捷方式。 Rails可以這樣做,因爲它從@article變量中提取類名,類似於send("#{@article.class.name.downcase}_path")

redirect_to(article_path(@article))redirect_to(article_path(:id => @article))的快捷方式,它是redirect_to(article_path(:id => @article.to_param))的快捷方式。基本上Rails說,@article是一個ActiveRecord對象,我會問它它的神奇to_param值。默認情況下,to_param只是返回文章的ID,但您可以覆蓋此文件以像slug或nicename一樣返回,如38-hello-world

所以redirect_to(@article)真的是說,好的,我有一篇文章,所以我需要文章的路徑,我需要文章的資源標識符或to_param

然後它構造URL!

0

:id => @article:id => @article.to_param一個快捷方式,剛剛指定你希望查看哪些文章。

0

首先,在您的控制檯中執行rake routes。它會顯示你的應用程序的路線列表。
將有一條路線叫文章

article_path只是路線的鏈接文章

而通過做(:id => @article),你傳遞一個具有@article值的id參數。