You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails报错:ActionView::Base未定义view_context变量或方法

问题解决方法

错误原因

你遇到的undefined local variable or method 'view_context'错误,是因为在FeaturesHelper顶层直接定义feature_info时,代码会在Helper类加载阶段执行,此时还未关联到具体的视图上下文(ActionView::Base实例),view_context对象还不存在,自然无法调用它的link_to方法。

解决方案

方案1:将feature_info改为Helper方法

把静态的feature_info变量改成Helper方法,这样方法会在视图渲染时被调用,此时已经处于视图上下文环境中,可直接使用link_to(无需view_context前缀):

修改FeaturesHelper:

module FeaturesHelper
  def feature_info
    [
      { features:
          [
            {
              description: "This is a #{link_to \"link!\", \"https://www.example.com\", target: :_blank, class: \"pink-link\"}"
            }
          ]
      },
      # 其他功能数据...
    ]
  end
end

局部视图无需修改,因为feature_info现在是一个可调用的方法,执行时会自动获取视图上下文:

<% feature_info.each do |info| %>    
    <% info[:features].each do |feature| %>
        <%= feature[:description].html_safe %>                               
    <% end %>
<% end %>

方案2:拆分数据与视图渲染逻辑

将链接相关的参数从描述文本中分离,在局部视图里动态生成链接,避免在Helper中提前构建HTML:

修改FeaturesHelper的feature_info:

module FeaturesHelper
  feature_info = [
    { features:
        [
          {
            prefix_text: "This is a ",
            link_text: "link!",
            link_url: "https://www.example.com",
            link_options: { target: :_blank, class: "pink-link" }
          }
        ]
    },
    # 其他功能数据...
  ]
end

更新局部视图,在视图中调用link_to生成链接:

<% feature_info.each do |info| %>    
    <% info[:features].each do |feature| %>
        <%= feature[:prefix_text] %>
        <%= link_to feature[:link_text], feature[:link_url], feature[:link_options] %>
    <% end %>
<% end %>

这种方式更符合MVC的职责分离,数据只存储纯文本和配置,视图负责HTML渲染。


内容的提问来源于stack exchange,提问作者Sara Fuerst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:45:04