2011-02-15 58 views
0

与非ID养在这种情况下我用得到它通过URL作为site.com/john的ActiveRecord :: RecordNotFound不是在Rails 3中

可能是因为查询的类型,当寻找的用户名URL具有不存在的用户名Rails不会重新调用RecordNotFound异常,因此不会呈现适当的404页面。我所做的目前的修复就像这段代码,但我想从Rails中获得异常,而不是像这样看起来很臭。

def show 
    @user = User.first(:conditions => ["lower(username) = ?", params[:username].downcase]) 
    if @user 
    ... 
    else 
    redirect_to '/404.html' 
    end 
end 

谢谢

回答

2

你说得对,它的查询类型:.first和其他相关联的捷径返回nil,而不是提高RecordNotFound例外。如果您稍稍更改代码并致电User.find_by_username! params[:username].downcase,它将恢复为在零记录上引发异常。

请参阅Raising an ActiveRecord error on RecordNotFound

相关问题