2012-03-22 80 views
1

我在application.rb中添加的选项:自动加载功能

config.autoload_paths += %W(#{config.root}/lib) 
config.autoload_paths += Dir["#{config.root}/lib/**/"] 

和lib \ functions.rb:

def some_lib 
    return "#######################################" 
end 

在控制器我试图调用此函数,但得到错误:

undefined local variable or method `some_lib' for #<TodosController:0x49a3850> 

我该如何解决它?

回答

2

为了从lib目录自动加载导轨,您需要遵循导轨命名约定。

的lib/functions.rb

class Functions 
    def self.some_lib 
    return "#######################################" 
    end 
end 

然后你可以Functions.some_lib

或者

的lib/functions.rb

module Functions 
    def some_lib 
    return "#######################################" 
    end 
end 

然后include Functions你需要你的方法。这使您可以执行:

some_lib

0

是的,基本上,不这样做,Ruby是一种面向对象的语言,你想使一个程序语言。

有一些方法可以使它完全按照您要求将新方法混合到内核或对象中的方式进行......但这不是您想要做的。

您是否想将新方法添加到所有控制器,而不是其他地方?然后将其添加到您的ApplicationController(./app/controllers/application_controller.rb)。或者将它添加到./lib中的模块中,然后将“包含MyControllerFunctions”添加到ApplicationController中。

你真的想在任何地方使用它吗?然后,我会做凯尔建议的,将它作为模块方法,并称之为MyFunctions.some_method。

Ruby会让你做任何事情,你可以可以设法使它可以按你想要的方式从任何类中调用......但是,真的,你不想要,它只会导致一个一塌糊涂。