我正在閱讀Beginning Rails 3.我有一個關於重定向的問題。該書指出「redirect_to也可以將對象作爲參數」與路徑進行比較。於是他們給的例子是,在Rails中重定向和路由
redirect_to(@article)
是一條捷徑相當於
redirect_to(article_path(:id => @article))
我不知道我理解這一點。這一行究竟是什麼:id => @article說?
感謝, 麥克
我正在閱讀Beginning Rails 3.我有一個關於重定向的問題。該書指出「redirect_to也可以將對象作爲參數」與路徑進行比較。於是他們給的例子是,在Rails中重定向和路由
redirect_to(@article)
是一條捷徑相當於
redirect_to(article_path(:id => @article))
我不知道我理解這一點。這一行究竟是什麼:id => @article說?
感謝, 麥克
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!
:id => @article
是:id => @article.to_param
一個快捷方式,剛剛指定你希望查看哪些文章。
首先,在您的控制檯中執行rake routes
。它會顯示你的應用程序的路線列表。
將有一條路線叫文章。
article_path
只是路線的鏈接文章。
而通過做(:id => @article)
,你傳遞一個具有@article
值的id
參數。