我在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>
我该如何解决?
答案 0 :(得分:2)
为了从lib
目录进行自动加载,您需要遵循rails命名约定。
<强> 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
答案 1 :(得分:0)
是的,基本上,不要这样做,ruby是一种OO语言,你试图制作一种程序性语言。
有一些方法可以让它完全按照你的要求将新方法混合到内核或对象中......但这真的不是你想要做的。
是否要将新方法添加到所有控制器,而不是必须添加到其他位置?然后将其添加到ApplicationController(./app/controllers/application_controller.rb
)。或者将它添加到./lib中的模块,然后将“包含MyControllerFunctions”添加到ApplicationController中。
你真的希望能够在任何地方使用它吗?然后我会做Kyle所建议的,将它作为模块方法,并将其称为MyFunctions.some_method。
Ruby会让你做任何事情,你可以设法让它可以按你想要的方式从任何一个类中调用......但实际上,你不想,它只是会导致一团糟。