undefined局部变量或方法`<helper_variable>'

时间:2016-01-22 17:19:42

标签: ruby-on-rails ruby haml helper

我正在尝试从项目中的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的新手,但我假设所有助手都隐式包含在视图/布局文件中,我读过的任何内容都没有提示我必须做任何额外的事情才能让它们协同工作。谢谢!

2 个答案:

答案 0 :(得分:1)

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

使用控制器(与模型不同)不同之处在于,如果模块的名称与相应的控制器匹配,则会自动包含该模块。

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

include ::TableFieldHelper

答案 1 :(得分:1)

如果帮助程序类名称与控制器名称不同,则必须手动要求帮助程序类。 http://api.rubyonrails.org/classes/ActionController/Helpers.html 您可以将帮助程序类的名称更改为与使用它的控制器相同的名称,也可以将其包含在控制器中。