Ruby on rails 通过链轮动态渲染sass文件
我想从助手那里,在Ruby on rails 通过链轮动态渲染sass文件,ruby-on-rails,sass,sprockets,Ruby On Rails,Sass,Sprockets,我想从助手那里,在.scss.erb模板中呈现一些变量,该模板使用image-url()sass函数: // template.scss.erb #<%= id %> { background-image: image-url('<%= image_file %>'); } 运行该代码时,sass现在等于: #foo { background-image: image-url('foo.jpg'); } 但是,当我下次尝试运行时: css=Sass::Eng
.scss.erb
模板中呈现一些变量,该模板使用image-url()
sass函数:
// template.scss.erb
#<%= id %> {
background-image: image-url('<%= image_file %>');
}
运行该代码时,sass
现在等于:
#foo {
background-image: image-url('foo.jpg');
}
但是,当我下次尝试运行时:
css=Sass::Engine.new(
他说,,
语法::scss,
cache:false,
加载路径:查看上下文.assets.path,
读缓存:false,
样式::压缩
).渲染
它回来了
NoMethodError: undefined method `[]' for nil:NilClass
from …/sprockets-3.2.0/lib/sprockets/sass_processor.rb:267:in `sprockets_context'
因为对Sass::Engine
的调用不提供链轮上下文
如果我从.scss.erb
模板中删除image-url()
,并将其替换为本机url()
,那么它将正确呈现为CSS,没有问题
那么如何在链轮上下文中呈现此模板呢?在深入研究了大量的尝试和错误后,我找到了解决方案:调用Sass::Engine.new
时,我必须提供:sprockets
哈希
css=Sass::Engine.new(
他说,,
语法::scss,
cache:false,
加载路径:查看上下文.assets.path,
读缓存:false,
样式::压缩,
#关键的成分…
链轮:{
上下文:查看上下文,
环境:查看上下文资源
}
).渲染
应该注意的是,
view\u context
是从一个视图文件传递的,但它也可能是ActionView::Base。new
在解决了同样的问题后,我在Github页面上发现了一个相同功能的实例,令人惊讶的是,它没有被复制
有一篇作者的文章解释了这个链接的方法:
谢谢!还有一件事我正在努力解决,那就是我想让
image-url()
SASS助手生成绝对路径。有什么想法吗?你能提供更多关于视图上下文的信息吗?在尝试调用ActionView::Base实例上的#assets时,我遇到了一个无方法错误。我确信这已经接近我所需要的了,但我真的不明白链轮上下文在这里做什么。@sammms不是在view\u context
上调用assets
,而是在Rails.application
上调用它,对于最新版本的Rails,您需要在应用程序中设置config.assets.compile=true
。rb
,否则资产在生产中将nil
。更多信息请访问