未定义的局部变量或方法“<helper_variable>”

undefined local variable or method `<helper_variable>'

我正在尝试从我的项目中的 haml 视图访问辅助变量。我在 rails-root/app/helpers/table_field_helper.rb:

中定义了助手
module TableFieldHelper
    def table_display_fields
        MORE_COMPLICATED_TABLE_DISPLAY_FIELDS #some array defined elsewhere in the file
    end
    ...
end

并尝试在 index.html.haml 中迭代 table_display_fields

...
%tr
    %th
    - table_display_fields.each do |field|
        %th= field
...

我收到一个错误:undefined local variable or method 'table_display_fields'

导致此错误的原因是什么?为什么我无法访问 TableFieldHelper 中的定义?我是 Ruby/Rails 的新手,但我假设所有助手都隐式包含在 view/layout 文件中,而且我读过的任何内容都表明我必须做任何额外的事情才能使它们一起工作。谢谢!

要使用模块中的 mixin 方法,您必须包含它。

使用控制器(与模型不同)的区别在于,如果模块的名称与相应的控制器相匹配,模块将被自动包含。

在您的情况下,将以下内容添加到控制器将解决问题:

include ::TableFieldHelper

如果助手 class 名称与控制器名称不同,那么您将不得不手动要求助手 class。 http://api.rubyonrails.org/classes/ActionController/Helpers.html 您可以将助手的名称 class 更改为与您在其中使用它的控制器相同的名称,或者您可以将它包含在控制器中。