Tun Sie dies in einem separaten Controller-Aktion:
layout.html.erb
<%= stylesheet_link_tag stylesheet_path() %>
Sheet Show Controller-Aktion
# Render the template to a string
css = Sass::Engine.new(
render_to_string("path/to/erb_template", :layout => false),
syntax: :scss,
cache: false,
read_cache: false,
style: :standard,
sprockets: {
context: self.view_context,
}
).render
# respond with the rendered string
respond_to do |format|
format.css { render plain: css, :content_type => "text/css" }
end
Sie können dann schließen die ERB Variablen in der Vorlage. Beachten Sie, dass dies bei jeder einzelnen Ladung durch die Sass-Engine geschickt wird, so dass Sie diese bei der Produktion zwischenspeichern möchten.
Wenn Sie alle Ihre gut organisiert in separaten Dateien halten möchten, legen Sie einfach Ihre Variablen in eine Datei, um als ERB und den Rest nur als Textdateien einzulesen.
rendered_sass = [render_to_string("stylesheets/colours", :layout => false),
File.read(Rails.root.join("app", "javascript", "stylesheets", "main.scss")),
File.read(Rails.root.join("app", "javascript", "stylesheets", "base.scss")),
File.read(Rails.root.join("app", "javascript", "stylesheets", "reset.scss")),
File.read(Rails.root.join("app", "javascript", "stylesheets", "type.scss")),
File.read(Rails.root.join("app", "javascript", "stylesheets", "layout.scss")),
File.read(Rails.root.join("app", "javascript", "stylesheets", "map.scss")),
File.read(Rails.root.join("app", "javascript", "stylesheets", "audio-player.scss")),
File.read(Rails.root.join("app", "javascript", "stylesheets", "slider.scss"))].join("\n\r")
Webpack wird keine Assets über den ERB-Interpreter ausführen - Kettenräder jedoch. Sie müssen außerdem beachten, dass Assets in der Regel zum Zeitpunkt der Bereitstellung kompiliert werden, sodass keine Variable auf Anforderung basieren kann. Eine bessere Lösung könnte darin bestehen, Klassen in Ihrem HTML-Code zu verwenden, um verschiedene Regeln in dem zu verwendenden Stylesheet festzulegen. – max