2011-06-05 135 views
0

的routes.rbRails的路由控制器問題

match '/:permalink' => 'Pub#show_page' 
在pub_controller

def show_page 

    @page = Page.find_by_permalink(params[:permalink]) 

    if @page.nil? 
     render :status => 404 
    end 

end 

在show_page.html.erb:

<h1><%= @page.title %></h1> 
<br> 
<p><%= @page.content %></p> 

然後我去到localhost:3000/non-existing-permalink

發生了什麼事這裏?我總是得到「nil:NilClass的未定義方法標題」,這意味着由於某種原因,def show_page允許瀏覽器進入視圖。我已經嘗試了if和if語句的每種可能的變體來嘗試修復它,但它總是忽視if語句。

如果永久鏈接是正確的,例如.3000/existing-permalink /它會使頁面正常工作。

爲什麼忽略if語句?我很困惑。

謝謝了..

回答

1
render :status => 404 

只是呈現與404例如狀態代碼通常頁它使用404代碼的Apache代碼呈現show_page.html.erb(當然,這對用戶是不可見的)。

你想重定向到404頁面。請參閱How to redirect to a 404 in Rails?

+0

如果您使用Rails3.0.x,您還需要閱讀以下內容:請參閱http://techoctave.com/c7/posts/36-rails-3-0-rescue-from-路由錯誤的解決方案 – cailinanne 2011-06-05 02:29:07