如果找不到文件,则在sinatra中渲染404

时间:2013-11-05 02:39:23

标签: ruby routing sinatra

我有一个基本的sinatra应用程序,可以从目录中呈现文件。如果页面不存在,我想要的是返回404。目前它引发500错误。

get '/:page' do
  erb :"pages/#{params[:page]}", layout: :"layouts/application"
end

2 个答案:

答案 0 :(得分:20)

试试这个;)

# 404 Error!
not_found do
  status 404
  erb :oops
end

使用您喜欢的任何名称制作一个404页面(例如我的oops.erb),这应该可以正常工作。

not_found Sinatra的错误处理帮助程序,用于获取它返回的错误500和404 not-founds。然后,您可以使用它更改HTTP状态和相应的视图。对于Sinatra的所有错误处理程序来说都是Check out the documentation:它们非常有用!

答案 1 :(得分:1)

您可以执行以下操作:

get '/:page' do
  requested_erb = File.join(root, 'pages', params[:page])

  pass unless File.exists?(requested_erb)

  erb :"#{requested_erb}", :layout: :"layouts/application"
end

我没有对此进行测试,因此上述代码可能存在一些问题,但这是我头脑中的一般想法。