Я хочу от помощника отобразить некоторые переменные в шаблоне .scss.erb
, который использует функцию image-url()
sass:
// template.scss.erb
#<%= id %> {
background-image: image-url('<%= image_file %>');
}
До сих пор часть ERB была простой:
(используя этот ответ о переполнении стека)
vars_binding = OpenStruct.new(
id: 'foo',
image_file: 'foo.jpg'
).instance_eval { binding }
template = File.read('path/to/template.scss.erb')
rendered_sass = ERB.new(template).result(vars_binding)
Запустив этот код, sass
теперь равно:
#foo {
background-image: image-url('foo.jpg');
}
Однако, когда я в следующий раз попытаюсь запустить:
css = Sass::Engine.new(
rendered_sass,
syntax: :scss,
cache: false,
load_paths: view_context.assets.paths,
read_cache: false,
style: :compressed
).render
Он возвращается
NoMethodError: undefined method `[]' for nil:NilClass
from …/sprockets-3.2.0/lib/sprockets/sass_processor.rb:267:in `sprockets_context'
потому что вызов Sass::Engine
не предоставляет контекст Sprockets.
Если я удалю image-url()
из шаблона .scss.erb
и заменю его родным url()
, он будет правильно отображаться как CSS, без проблем.
Итак, как мне отобразить этот шаблон в контексте sprockets?