RubyonRails-在css erb文件中使用助手提供未定义的方法

RubyonRails-在css erb文件中使用助手提供未定义的方法,css,ruby-on-rails-3,undefined,erb,helper,Css,Ruby On Rails 3,Undefined,Erb,Helper,我有一个css.erb文件,其中包含我的一个页面的样式。我有一个助手,它根据给定图像的位置预先设置该图像的URL 当我从视图调用helper函数时,输出是预期的(一个包含图像的URL的字符串)。但是,在css.erb文件中调用它会给我一个未定义方法错误,即使我将相同的函数复制并粘贴到css文件中 这就好像帮助程序未包含在css文件中并且被忽略一样。默认情况下,帮助程序不可用于模板化的.css文件。它们的目的仅是为了帮助查看施工情况。但是,您可以使用初始值设定项尝试上述解决方法: Rails.ap

我有一个css.erb文件,其中包含我的一个页面的样式。我有一个助手,它根据给定图像的位置预先设置该图像的URL

当我从视图调用helper函数时,输出是预期的(一个包含图像的URL的字符串)。但是,在css.erb文件中调用它会给我一个
未定义方法
错误,即使我将相同的函数复制并粘贴到css文件中


这就好像帮助程序未包含在css文件中并且被忽略一样。

默认情况下,帮助程序不可用于模板化的.css文件。它们的目的仅是为了帮助查看施工情况。但是,您可以使用初始值设定项尝试上述解决方法:

Rails.application.assets.context_class.instance_eval do
  include YourHelperModule
end
或者,如果您只需要一个或几个文件使用此代码,则可以使用上述解决方案,方法是将此代码添加到.css.erb文件的顶部:

<% environment.context_class.instance_eval { include YourHelperModule } %>


这非常有效!现在我有一个问题,我的会话变量在助手中没有被检测到(而当我从视图调用助手时,它们被检测到)。它说,
未定义的局部变量或方法“session”
。知道为什么吗?同样的问题-会话只对控制器和视图可用,而对资源不可用。不幸的是,没有简单的解决方法。资产被设计为编译成静态文件,而会话信息本质上不能是静态的。您最好创建不同的资产文件,并使用会话加载适合您案例的资产文件。唯一的问题是,会有大量重复的样式表。无论如何,谢谢你,如果我找到一个合适的方法解决这个问题,我会更新这个问题。我也在这个问题上,我认为没有办法访问请求或会话。不是吗?@StefanDunn如果我理解正确,你不需要重复CSS。您可以只加载一个附加的,它只定义默认值之间的差异。