2011-06-05 105 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