Как реализовать erb partials в приложении, не относящемся к рельсам? - PullRequest
8 голосов
/ 23 марта 2012

Я хочу сделать что-то вроде этого:

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

Но как мне использовать партиалы в template.erb?

Ответы [ 2 ]

8 голосов
/ 15 июня 2012

Возможно, грубой силой это?

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)
1 голос
/ 14 сентября 2017

Пытался найти то же самое и не нашел ничего, что могло бы удовлетворить, кроме использования 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>

Тогда в вашем рубиновом звонке

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.

...