Rails中的未定义方法,即使该方法存在

时间:2015-11-30 15:42:22

标签: ruby-on-rails ruby activerecord

我在我的视图助手目录中有一个方法,我试图在模型中使用但我一直得到一个未定义的方法错误。我无法弄清楚我做错了什么。这是我的模块。

app.config(function($stateProvider, $locationProvider, $urlRouterProvider) {

$locationProvider.html5Mode(true);

$stateProvider
    .state('', {
        url: '',
        views: {
            "menu-view": {
                templateUrl: "partials/menu.html"
            },
            "map-view": {
                templateUrl: 'partials/floors/floor-1.html'
            }
        }
    })
});

这是我想要使用该方法的类。

module StbHelper
def gen_csv(stbs)
    CSV.generate do |csv|
        csv << [
            'param1',
            'param2'
        ]
        stbs.each do |stb|
            health_check = stb.stb_health_checks.last
            csv << [
                'value1',
                'value2'
            ]
        end
    end
end

1 个答案:

答案 0 :(得分:0)

您已经定义了一个不需要实例化的模块。您应该能够在没有StbHelper部分的情况下使用它(只要您需要文档中的模块):

def self.report(options={})
    csv_file = nil
    if options == {}
       ########################################
       # This is the line that throws the error
        csv_file = gen_csv(Stb.all)
       #######################################
    else
        stbs = []
        customers = List.where(id: options[:list])[0].customers
        customers.each do |customer|
            customer.accounts.each do |account|
                 stbs += account.stbs
            end
        end
        csv_file = gen_csv(stbs)
    end
end

但是你不应该使用帮助器,你可以创建一个普通的模块并以同样的方式要求它。

编辑:将模块保存在名为app / modules的新文件夹中(并重新启动服务器),使用模块内容保存名为stb_helper.rb的文件:

module StbHelper
def gen_csv(stbs)
    CSV.generate do |csv|
        csv << [
            'param1',
            'param2'
        ]
        stbs.each do |stb|
            health_check = stb.stb_health_checks.last
            csv << [
                'value1',
                'value2'
            ]
        end
    end
end