如何在Sass中访问Rails对象?

时间:2011-09-16 05:00:18

标签: ruby-on-rails css sass erb

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

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

...

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

4 个答案:

答案 0 :(得分:1)

我可以想到几个方法脱颖而出:

  1. 通过控制器提供样式表。
  2. 使用CSS类配置颜色,并通过控制器,内联部分或CSS @import仅为CSS提供服务。
  3. 通过控制器提供样式表非常简单,所以没什么好说的。这可能有点难看和麻烦。

    对于第二个,你需要添加一些额外的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', '...');
    

答案 1 :(得分:0)

我认为您可以像在那里一样做一些事情,但是您需要将文件的扩展名更改为“.css.scss.erb”

答案 2 :(得分:0)

为了跟进这一点,我确实创建了一个样式表控制器,但是为了让Sass解析和资产管道加载路径都正常工作而设计得相当干净。我最终倾销并重新组织样式,因此我可以为每个公司生成一个静态样式表,并在公司更新时重新生成并上传到S3。

答案 3 :(得分: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文件文件夹,然后再回到顶层-您可以进行配置也是如此)。