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它。

这个问题是双重的。

  1. 您需要使用外部Foo范围来定义BarWoo
  2. 您已将hello定义为实例方法,然后尝试在类上调用它。

使用def self.hello而不是def hello定义您的方法

 module Foo module BarWoo def self.hello puts "hello" end end end 

你也可以这样做

 module Foo::Barwoo; end;