如何在sinatra中自定义布局目录

时间:2017-06-27 13:37:56

标签: ruby routes sinatra

我有一个有多种布局的Sinatra应用程序,一个用于管理面板,一个用于公共。我想在视图中将它们隔离到自己的子目录中:

views/
views/layout.erb (for public)
views/auth/
views/auth/layout.erb (for admin)

但我收到了错误。 config.ru:

require 'sinatra'

get "/" do
  erb :layout
end

get "/auth" do
  erb :layout => :'auth/layout'
end

1 个答案:

答案 0 :(得分:0)

首先,第二次“erb”调用是错误的。将其更改为:

erb :layout, :layout_options => { :views => 'views/auth' }

如果你想使用Sinatra的“经典风格”,你展示的代码不应该在config.ru。将代码从config.ru移至另一个文件,例如app.rb。更正第二个“erb”电话,app.rb将包含:

# app.rb
require 'sinatra'
get "/" do
  erb :layout
end    
get "/auth" do
  erb :layout, :layout_options => { :views => 'views/auth' }
end

像这样运行:ruby app.rb。默认情况下,它将在端口4567上启动本地服务器。

现在,网址http://localhost:4567http://localhost:4567/auth应该有效。

请记住,您不应直接呈现layout.erb文件。它用于包装您的视图。查看named export了解更多示例。