考虑一下这个简单的应用程序:
app_folder_root/ | my_app/ | my_app.rb | public/ | css/ | index.css | layout.css | views/ | index.haml | layout.haml config.ru
配置.ru:
require 'rubygems' require './my_app/my_app' map '/' do run MyApp end
require 'sinatra/base' class MyApp < Sinatra::Base get '/' do haml :index end end
我试着在 my_app.rb 设置视图的名称并尝试在中引用它 layout.haml
my_app.rb
layout.haml
这是使用Haml,但我希望这是无关的-认为它应该是相同的erb等。
布局.haml ,我想引用将被呈现的视图,并通过命名约定包含特定于视图的样式表。例如,如果 index.haml 是要渲染的,我想包括 css/index.css . 做这件事最好的方法是什么?
布局.haml
index.haml
css/index.css
我通过以下方法解决了这个问题:
在 index.haml views :
views
- @views = Array.new unless defined? @views - @views << 'index'
在 layout.haml @views :
@views
%head - @views.each do |view| - haml_tag :link, {:rel => 'stylesheet', :type => 'text/css', :href => "css/#{view}.css"}
@视图 在视图中,确保在附加到它之前定义了它,但目前它是可管理的。
@视图
@视图 在每个视图中定义。在 config.ru
config.ru
before do @views = Array.new end
我现在可以从视图中删除这一行:
- @views = Array.new unless defined? @views