想象一下这个结构:
/project
/templates
view1.haml
view2.haml
misc_views/
view3.haml
view4.haml
even_deeper/
view5.haml
/public
script1.js
模板的深度可能会有所不同,如果我想要包含一些文件,我想引用公共目录。是否有帮助者或其他噱头将我带到公共目录?在我的观点中有像../../../public/script1.js或../../public/script1.js这样的东西似乎很糟糕。当然必须有更好的方法。
答案 0 :(得分:3)
您可以使用the settings.public
configuration来引用公共目录。例如:
get "/" do
js = File.join( settings.public, 'script1.js' )
File.exists?( js ) #=> true
end
由于这是一个绝对路径,因此无需相对于您的视图来获取文件。你可以从你的视图中找到它,但我会亲自将路径设置为控制器的实例变量。
get "/" do
# If you really only need the directory
@public = settings.public
# If you actually need the path to a specific file
@main = File.join( settings.public, 'main.js' )
# If you actually need the contents of a file
@js = IO.read( File.join( settings.public, 'main.js' ) )
end
答案 1 :(得分:1)
您必须通过Web地址的根或相对请求路径包含静态资源,因为它将是请求它的浏览器,而不是您的服务器端代码。除非我在你的情况下弄错了?
<script type="text/javascript" src="/script1.js"></script>