2010-03-04 49 views
0

我在我的RoR項目中使用靜態URL。真的沒有控制器或行動映射到,所以我試圖把map.root "/static_page"map.root "static_page"但我得到的錯誤。我如何映射到路徑?在導軌上使用map.root映射到靜態路徑

編輯:我使用一個控制器來提供靜態頁面,這些都不是HTML頁面,但靜態控制我使用此:http://snafu.diarrhea.ch/blog/article/4-serving-static-content-with-rails

+0

你告訴我們沒有控制器或動作映射到,然後拋出你正在使用靜態控制器的默認動作。 今後如何告訴我們您遇到的錯誤以及您的預期行爲。 – EmFi 2010-03-05 10:53:18

+0

我很抱歉不清楚。我仍然在學習Rails。 – 2010-03-06 04:42:12

回答

2

我不認爲map.root做你想做的事情。

map.root看起來像一條命名的路由,因爲它是。但它是一個特殊的命名路由,用於路由沒有本地路徑的url(例如:'http://www.example.com/')。所以它不需要像標準命名路線那樣的路徑參數。

看起來好像你不知道map.root在幹什麼,或者試圖將根映射壓入你的自定義靜態控制器。

如果是前者,只需爲路線選擇另一個名稱即可解決問題。 如果是後者,你真正需要做的就是傳遞一個特定的路徑值。將它放在捕捉所有靜態頁面的上方,否則它將永遠不匹配。

map.root :controller => 'static', :path => "my_template.html" 

如果你試圖迫使特定的路線去一個特定的靜態頁面,創建與該路徑被完全傳遞路線從公衆的意願下降的文件。所以你甚至不需要寫一條路線。 (如:http://www.example.com/whatever/static_pages如果存在自動提供public/whatever/static_pages

但是,如果你想要的文件包含ERB/HAML /等,要使用上面的方法,借道你的靜態控制的要求。問題是,它沒有映射到控制器/操作,但通過創建靜態控制器,您確實有一條路由,現在爲您的命名路由提供了一個操作。如果由於某種原因該路徑不適合您的控制器邏輯,您可以使用上面定義的explicit_path操作在內部提供期望的路徑作爲參數,並使用類似這樣的路由。

map.static_page '/static_page', :controller => 'static', 
    :path => "my template.html" 

P.S.:template_exist在Rails 2.3中已被棄用。所以如果升級,你必須自己定義它。

+0

感謝您的友好的答案,這工作,但我不得不把路徑內的數組。 – 2010-03-06 04:41:49

1

你不需要的路線。只需把文件放在/ public,它應該工作

+0

我正在使用這個靜態控制器來渲染頁面:http://snafu.diarrhea.ch/blog/article/4-serving-static-content-with-rails 所以這是行不通的。我的問題是如何將其映射到一個URL .. – 2010-03-04 21:55:07