【问题标题】:Ruby on Rails - Using helpers inside css erb file gives undefined methodRuby on Rails - 在 css erb 文件中使用帮助程序会给出未定义的方法
【发布时间】:2012-11-12 22:37:46
【问题描述】:

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

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

就好像帮助器没有包含在 css 文件中并被忽略。

【问题讨论】:

    标签: css ruby-on-rails-3 undefined erb helper


    【解决方案1】:

    默认情况下,帮助程序不适用于模板化的 .css 文件。它们仅用于帮助构建视图。但是,您可以使用初始化程序尝试提到的解决方法here

    Rails.application.assets.context_class.instance_eval do
      include YourHelperModule
    end
    

    或者,如果您只需要一个或几个文件,您可以使用提到的解决方案here,将以下代码添加到 .css.erb 文件的顶部:

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

    【讨论】:

    • 这很好用!现在我遇到了一个问题,即在 Helper 中没有检测到我的会话变量(而如果我从视图中调用了 helper,它们会检测到)。它说,undefined local variable or method 'session'。知道为什么吗?
    • 同样的问题 - 会话只对控制器和视图可用,对资产不可用。不幸的是,没有简单的解决方法。资产旨在编译为静态文件,而会话信息本质上不能是静态的。您最好创建不同的资产文件并使用会话为您的案例加载正确的文件。
    • 唯一的问题是会有很多重复的样式表。无论如何,谢谢,如果我找到解决这个问题的好方法,我会更新这个问题。
    • 我也在这个问题上,我认为没有办法访问请求或会话。不是吗?
    • @StefanDunn 如果我对问题的理解正确,则无需重复 CSS。你可以只加载一个额外的,它只定义了默认的区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多