2012-12-04 29 views
3

应用程序/控制器/ app.rb在西纳特拉配置ERB目录

require 'sinatra' 
get '/' do 
    erb :index 
end 

应用程序/视图/ index.erb

<html> 
    <body> 
     <p>Hello World</p> 
    </body> 
</html> 

错误:

Errno::ENOENT at/
No such file or directory - .../app/controllers/views/index.erb 

如何配置ERB查看app/views而不是app/controllers/views

回答

7

您可以通过调整配置设置来实现此目的。由于您使用的是非标准设置,因此您需要告诉Sinatra应用程序的实际根目录以及在哪里可以找到视图。在您的app/controllers/app.rb文件中添加的顶部:

# sets root as the parent-directory of the current file 
set :root, File.join(File.dirname(__FILE__), '..') 
# sets the view directory correctly 
set :views, Proc.new { File.join(root, "views") } 

您可以在Sinatra Documentation阅读更多关于西纳特拉configuration options

3
set :views, Proc.new { File.join(root, "views") } 

http://www.sinatrarb.com/configuration.html#__view_template_directory

编辑:显然,什么也不做,嘿嘿。或许,这将是最好有在app/文件,需要你的控制器:

Dir.glob("controllers/*.rb").each { |r| require_relative r } 

然后,app/views将成为默认视图目录。

+0

啊谢谢。在:views目录中不知道erb搜索。 – garbagecollector

+1

这会失败,因为Sinatra将根目录视为“app/controllers”,因此将查找该路径下的“views”目录。 –