这是我的问题。
在我的控制器中,我检查URL中给出的参数是否是有效用户,如果不我希望将访问者重定向到“经典”404页面。这是我的控制器:
def home
@user = User.find_by_domain(params[:domain])
if !@user.nil?
respond_to do |format|
format.html # home.html.erb
end
else
render(:file => "#{RAILS_ROOT}/public/404.html", :status => 404, :layout => false)
end
end
然而,当@user
为nil
时,我收到以下错误:
Template is missing
Missing template D:/Project/public/404.html with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths
我没有修改Rails生成的404页面:
<!DOCTYPE html>
<html>
<head>
<title>The page you were looking for doesn't exist (404)</title>
<style type="text/css">
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
div.dialog {
width: 25em;
padding: 0 4em;
margin: 4em auto 0 auto;
border: 1px solid #ccc;
border-right-color: #999;
border-bottom-color: #999;
}
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
</style>
</head>
<body>
<!-- This file lives in public/404.html -->
<div class="dialog">
<h1>The page you were looking for doesn't exist.</h1>
<p>You may have mistyped the address or the page may have moved.</p>
</div>
</body>
</html>
我在这里做错了什么?
答案 0 :(得分:5)
尝试这个,可能对你有所帮助,Thx
if !@user.nil?
respond_to do |format|
format.html # home.html.erb
end
else
raise ActiveRecord::RecordNotFound
end
我是rails应用程序,这是我处理404的方法,在我的application_controller.rb中,我的代码如下:
unless Rails.application.config.consider_all_requests_local
rescue_from Exception, :with => :render_error
rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found
rescue_from ActionController::UnknownController, :with => :render_not_found
rescue_from ActionController::UnknownAction, :with => :render_not_found
end
private
def render_not_found(exception)
render :template =>"/error/404", :status => 404
end
def render_error(exception)
render :template =>"/error/500", :status => 500
end
在config / environments / development.rb中确保:
config.consider_all_requests_local = true
答案 1 :(得分:4)
1)在ApplicationController中添加:
rescue_from ActiveRecord::RecordNotFound do |exception|
render_404
end
def render_404
respond_to do |format|
format.html { render "errors/404", :status => '404 Not Found', :layout => false }
format.xml { render :nothing => true, :status => '404 Not Found' }
end
true
end
2)在Views文件夹中创建一个名为“ errors ”的子文件夹
3)将您当前的404.html文件复制到新的“views / errors”文件夹中,并将其重命名为“ 404.html.erb ”
旁注:
就个人而言,我喜欢创建自定义404内容,然后使用应用程序的布局。我更喜欢用这种方式渲染500个错误。