2012-03-28 56 views
6

我從rails 3.1.3升級到3.2.2,但出於某種原因,現在url_for總是返回/資產(如果路由不存在)。爲什麼url_for返回/資產未定義的路線?

例如:

url_for({}) #=> "/assets" 
url_for({action: 'fake', controller: 'notreal'}) #=> /assets?action=fake&controller=notreal 

但我希望它拋出正常的ActionController :: RoutingError,因爲它一般不會......

+0

奇怪的一個。檢查所有的env配置。你重新定義了'url_for'嗎?你運行'rake rails:update'嗎? – Austin 2012-03-28 03:34:32

+0

你解決了這個問題嗎?我在這裏遇到同樣的問題。對於最簡單的場景,即。沒有資源,只是創建了一個DemoController,並使用index行動中的redirect_to:action =>'show'。它會生成該類型的URL:/ assets?action = show&controller = demo 我期望這會呈現顯示模板。你知道發生了什麼事嗎? – jlstr 2012-04-03 20:50:43

+0

@ user766388仍然是一個謎:/ – bkempner 2012-04-06 01:14:44

回答

0

我認爲你有資產預編譯並自圖像不存在於資產文件夾中,編譯文件名爲空,但路徑指向資產文件夾的根目錄。您是否也看到有關未在日誌中找到預編譯資源的錯誤?

嘗試在開發環境中無需預編譯資源的情況下運行,以便通過此操作。我不會重複提供有關資產預編譯的詳細信息 - 有關資產管道的詳細信息,可以查看http://guides.rubyonrails.org/asset_pipeline.html。如果您僅在生產環境中看到此問題,可能是因爲主機平臺正在爲您預編譯資產。

但是,如果您希望在生產中發生這種情況,則可能需要檢查映像的存在,而不是禁用預編譯。

1

如果通過指定controller-action來建立路由,則Rails不會檢查路由的存在。當然,它顯示/資產{}路線。

您應該更好地指定routes.rb中的命名路由,然後將它們用於url_for。像:

url_for add_user_path

這可以確保你要麼成功(對於存在已命名的路線),或者得到一個錯誤。

HTH

相關問題