Rails 2.3.5:如何访问lib / directory / file.rb中的代码?
我创建了一个文件,所以我可以在lib / foo / bar_woo.rb中的许多模型中共享一个方法。 在bar_woo.rb里面我定义了以下内容:
module BarWoo def hello puts "hello" end end
然后在我的模型中我做了类似的事情:
def MyModel < ActiveRecord::Base include Foo::BarWoo def some_method Foo::BarWoo.hello end end
解释器抱怨它期望bar_woo.rb定义Foo :: BarWoo。
Agile Web Development with Rails一书指出,如果文件包含类或模块,并且文件是使用类或模块名称的小写forms命名的,那么Rails将自动加载文件。 因为这个我没有要求它。
定义代码的正确方法是什么,在模型中调用代码的正确方法是什么?
您可能想尝试:
module Foo module BarWoo def hello puts "hello" end end end
同样用于调用你不会用Foo::BarWhoo.hello
调用它 – 这必须使它成为一个类方法。 但是, include
模块应该可以让你用hello
调用它。
/lib
子目录中的文件默认情况下不会自动require
。 处理此问题的最简单方法是在config/initializers
下添加一个新的初始化config/initializers
,为您加载库模块。
在: config/initializers/load_my_libraries.rb
选择您想要的任何名称。
require(File.join(RAILS_ROOT, "lib", "foo", "bar_woo"))
一旦require
,您应该能够随意include
它。
这个问题是双重的。
- 您需要使用外部Foo范围来定义BarWoo
- 您已将hello定义为实例方法,然后尝试在类上调用它。
使用def self.hello
而不是def hello
定义您的方法
module Foo module BarWoo def self.hello puts "hello" end end end
你也可以这样做
module Foo::Barwoo; end;