如何在Sass中访问Rails对象?

问题描述 投票:6回答:4

在Rails 3.1.0项目中,我的公司具有一些可自定义的属性,例如background_color和link_color。我希望能够像这样设置一些Sass变量:

$background_color: <%= @company.background_color %>
$link_color: <%= @company.link_color

...

这不起作用,因为当Sass执行其操作时@company为零。我不确定如何以动态方式解决此问题(可以创建公司,可以更改颜色,并且视图可以立即更新)。有什么建议吗?

ruby-on-rails css sass erb
4个回答
1
投票

我可以想到几个方法可以解决我的问题:

  1. 通过控制器提供样式表。
  2. 使用CSS类来配置颜色,并通过控制器,内联部分代码或CSS @import仅提供该CSS。

通过控制器为样式表提供服务非常简单,因此无需多说。这可能有点丑陋和麻烦。

对于第二个,您将添加几个额外的CSS类:

.custom-bg {
    background-color: some-default-bg;
}
.link-fg {
    color: some-default-fg;
}
/*...*/

然后,任何需要使用自定义背景色的元素都将需要它们通常的CSS类和custom-bg;其他可配置的值将需要类似的提示。要提供定制的CSS,您可以使用标准的ERB部分将<style>元素内联到HTML中,或者可以通过控制器(通过<style src="...">@import)提供CSS。因此,您会在老式HTML中用老式的CSS类来伪造SASSy的优点。

还有JavaScript。您需要某种方法来识别需要调整其颜色的元素,然后使用诸如此类的方法直接调整它们:

$('.need-custom-background').css('background-color', '...');

0
投票

我认为您可能可以像在这里一样执行某些操作,但是您需要将文件的扩展名更改为'.css.scss.erb'


0
投票

为了对此进行跟踪,我确实创建了一个样式表控制器,但是它的设计相当不错,可以使Sass解析和资产管道加载路径全部正常工作。我最终将其转储并重新组织了样式,以便可以为每个公司生成一个静态样式表,该表将在公司更新时重新生成并上传到S3。


0
投票

好吧,如果您是指像通过控制器加载的模型那样的动态对象,那么您将无法做到,至少不是很容易。这是因为与HTML ERB模板不同,SASS模板通常只渲染一次并静态提供,除非代码中发生某些更改或通过rake重新编译它们(取决于您的环境配置)。但是您可以访问一些辅助方法,全局对象,并在其中使用一些红宝石,方法是使用“ erb”扩展名重命名该文件,例如application.css.scss.erb。见

如果您需要基于动态加载的对象(例如模型)的样式,则可以...

  1. 按原样在模板中编写CSS样式
  2. 动态地编译样式表。请在此处查看评分最高的答案:How do I create dynamic CSS in Rails?
  3. [在某些情况下,您可以通过利用Rails / SASS的导入路径层次结构来完成相同的事情(即SASS @import 'partial_name_with_no_path'将首先搜索导入的SASS文件文件夹,然后再回到顶层-您也可以配置它) 。
© www.soinside.com 2019 - 2024. All rights reserved.