【问题标题】:How to implement erb partials in a non rails app?如何在非 Rails 应用程序中实现 erb 部分?
【发布时间】:2012-03-23 14:22:40
【问题描述】:

我想做这样的事情:

require 'erb'
@var = 'test'
template = ERB.new File.new("template.erb").read
rendered = template.result(binding())

但是如何在 template.erb 中使用局部变量?

【问题讨论】:

标签: ruby erb partials


【解决方案1】:

也许是暴力破解?

header_partial = ERB.new(File.new("header_partial.erb").read).result(binding)
footer_partial = ERB.new(File.new("footer_partial.erb").read).result(binding)

template = ERB.new <<-EOF
  <%= header_partial %>
  Body content...
  <%= footer_partial %>
EOF
puts template.result(binding)

【讨论】:

  • 谢谢!这正是我想出的;)
  • 有什么宝石可以帮助解决这个问题吗?
  • 这是一个很棒的答案,帮助我节省了大量时间。关于这一点的一个快速说明:如果您的部分需要访问一个更改的变量(例如,每个循环递增一次的索引值),您需要在每个循环中重新生成部分。
【解决方案2】:

试图找出相同的东西,除了使用 Tilt gem 之外没有发现太多令人满意的东西,它包装了 ERB 和其他模板系统并支持传递块(也就是单独渲染调用的结果)这可能会更好一点。

见于: https://code.tutsplus.com/tutorials/ruby-for-newbies-the-tilt-gem--net-20027

layout.erb

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title><%= title %></title>
</head>
<body>
    <%= yield %>
</body>
</html>

然后在你的 ruby​​ 调用中

template = Tilt::ERBTemplate.new("layout.erb")

File.open "other_template.html" do |file|
    file.write template.render(context) {
        Tilt::ERBTemplate.new("other_template.erb").render
    }
end

它将other_template 的结果应用到yield 正文中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多