2012-09-18 149 views
3

我正在使用Ruby on Rails創建我的應用程序並在heroku上使用THIN服務器。HTTP GET變成POST方法

目前使用Rails 3.2.8

我就遇到了這個bizzar行爲,我不明白。

鏈接是在導航欄中使用link_to助手創建的。我想明確地使用HTTP GET方法,所以我的Ruby代碼寫像這樣:

<%=link_to "FAQ",help_path,:method=> :get %> 

生成的HTML看起來像這樣:

<a data-method="get" href="/en/help">FAQ</a> 

如果我運行耙路線,help_path似乎是這樣的:

help  (/:locale)/help(.:format)   static_pages#Help {:locale=>/en} 

然而,當我看看是什麼在Firebug與URL事情(使用網絡選項卡),它看起來像被用來代替GET POST方法。 所以不是錯過:

GET help 

這被視爲代替:

POST help 

如果我刪除,像這樣的明確呼籲get方法:

<%=link_to "FAQ",help_path %> 

導致此:

<a href="/en/help">FAQ</a> 

然後,在螢火蟲 - >網,我甚至不會看這個網址:得到幫助

在URL欄,這反而證明這一點:

? undefined 

Wehn的URL是不確定的,軌道heroku上的應用程序將嘗試單獨加載每個資產文件,而不是加載預編譯的清單資產文件。

有沒有人遇到過這種情況?我無法弄清楚Rails或heroku的魔法黑匣子中的哪個地方,或者瘦服務器可能會改變get和post方法的行爲。

任何建議,非常感謝!

回答

4

我會開始說我沒有看到爲什麼要做link_to和顯式狀態的原因:get as:method。無論如何,這是默認行爲。

您的問題:您看到一個POST請求,因爲當您使用link_to的:method選項時,它會生成一個表單,它會發送到所需的URL和一個_method隱藏輸入,並具有所需的請求類型(POST/PUT/DELETE /得到)。 Rails知道如何處理包含_method參數的POST請求,並以正確的路由做出響應。在你的情況 - 匹配GET操作的路線。

您可以通過link_to here瞭解更多信息。

編輯:

我更徹底地閱讀文檔,它看起來像:方法選項不支持:得到的值。

+0

Erez,對link_to方法的很好的解釋。 link_to上的強制方法「Get」是我解決不同問題的一種方法。但根據你的回答,這不是最好的方法。我將重命名這個問題,這樣問題就更加明確。 – Kuu