Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何将我的HTML/模板插入每个<;车身>;标签?_Ruby_Sinatra_Markaby - Fatal编程技术网

Ruby 如何将我的HTML/模板插入每个<;车身>;标签?

Ruby 如何将我的HTML/模板插入每个<;车身>;标签?,ruby,sinatra,markaby,Ruby,Sinatra,Markaby,我想在我的每个webapp页面的标记中插入一段任意HTML代码(或者最好是另一个Markaby模板) 我使用的是Markaby,这意味着模板(或多或少)是一个Ruby类,body是它的方法。因此,必须能够编写一些Ruby代码来拦截body方法调用并插入我的HTML 我该如何使用Sinatra?是什么阻止您在布局中使用?例如,下面的代码将使用 在这种情况下,模板是layout.erb,页面是hello.erbhello.erb在layout.erb中代替语句呈现。这就是你的意思吗 require

我想在我的每个webapp页面的
标记中插入一段任意HTML代码(或者最好是另一个Markaby模板)

我使用的是Markaby,这意味着模板(或多或少)是一个Ruby类,
body
是它的方法。因此,必须能够编写一些Ruby代码来拦截
body
方法调用并插入我的HTML


我该如何使用Sinatra?

是什么阻止您在布局中使用
?例如,下面的代码将使用

在这种情况下,模板是
layout.erb
,页面是
hello.erb
hello.erb
layout.erb
中代替
语句呈现。这就是你的意思吗

require 'sinatra'

get '/hello/:name' do
  @name = params[:name]
  erb :hello
end

__END__
@@ layout
<html>
  <body>
   <%= yield %>
  </body>
</html>

@@ hello
<h3>Hello <%= @name %>!</h3>
需要“sinatra”
获取“/hello/:name”do
@名称=参数[:名称]
雇员再培训局:你好
结束
__结束__
@@布局
@@你好
你好

可以通过在MarkabyBuilder类中重新定义body方法来完成的代码。这段代码可以做到这一点:

class Markaby::Builder
  alias body_orig body
  def body(*args, &block)
    str = capture(&block)
    block = proc { text('ON EVERY PAGE' + str) }
    body_orig(*args, &block)
  end
end
这一个将包括另一个Markaby模板,作为
body
标记中的第一件事:

class Markaby::Builder
  alias body_orig body
  def body(*args, &block)
    str = capture(&block)
    str2 = render :mab, :include_template_name, *args
    block = proc { text(str2 + str) }
    body_orig(*args, &block)
  end
end

谢谢你的建议,但我真正需要的是我在另一个答案中发布的东西