2009-08-11 14 views
4

我有一個PostsController,對於這個例子來說不是必需的,但是當我粘貼片段時會有所幫助,而且我正在使用current_page?,顧名思義,找出正在顯示的頁面。我得到了似乎奇怪的結果。在rails中example.com/controller和example.com/controller/有什麼區別?

current_page?將返回不同的答案,如果我去/posts/posts/

作爲測試,對我的控制器索引視圖我只是打電話

current_page?(:action => 'index') 

如果我去/控制器(沒有尾隨斜線),current_page?將返回true。但是,如果我去/ controller /,它將返回false。

尾礦日誌顯示,無論在事實上做打同樣的動作

Processing PostsController#index (for 127.0.0.1 at 2009-08-11 18:28:12) [GET] 
    Parameters: {"action"=>"index", "method"=>:get, "controller"=>"posts"} 

的動作產生了兩個相同的結果,因爲可以預期的。

我使用Rails 2.3.2和this ticket是唯一看起來很接近的東西。唯一的評論者認爲current_page應該「將兩個URL視爲同一頁面,如果它們都引用相同的RESTful對象」。

感謝您對此的任何洞察。

回答

4

軌路由將容忍結尾的斜線,但它不會生成當你通過:action => 'index', :controller => 'posts'url_for(與標準路線)。

根據current_page? documentation它只是從傳遞的參數生成一個url,然後與當前的請求url 字符串進行比較。因爲這個生成的URL不會有結尾的斜線,它將返回true時,當前URL是/控制器和假時/控制器/

有幾種方法可以解決你的問題:

  • 比較參數,可以沒有生成url
  • 從/ controller /到/ controller重定向。這實際上是,如果你做的頁面緩存等,也對SEO
  • 我敢肯定還有其他的方法一如既往:)
+0

這是有道理的一個好主意。應該可能檢查了current_page的來源?非常感謝你! – theIV 2009-08-11 23:15:27

相關問題