Rails 3中的显式要求

4

我正在将我的Rails 2应用程序转换为Rails 3。到目前为止,我已经取得了成功。然而,有一个奇怪的问题是我必须显式地要求任何外部文件。这是我的原始(即Rails 2)ActiveRecord模型:

class Book < ActiveRecord::Base
  belongs_to :author
  has_many :translations, :dependent => :destroy
  include Freebase
...
end

为了使其在Rails 3中正常工作,我必须要求模型TranslationFreebase.rb文件,因此:
class Book < ActiveRecord::Base
  require File.expand_path(File.dirname(__FILE__) + '/translation.rb')
  belongs_to :author
  has_many :translations, :dependent => :destroy
  require File.expand_path(File.dirname(__FILE__) + '../../../lib/freebase.rb')
  include Freebase
  ...
end

这是Rails 3的正常方式吗?还是我做错了什么。换句话说,为什么需要“显式”地包含那些文件?也许Freebase.rb文件有一些原因,它放在lib文件夹中,但是同一目录下的Translation模型呢?
谢谢大家!
1个回答

5
Rails 3没有像Rails 2那样自动加载许多内容。
打开config/application.rb文件,定制看起来像下面这行的代码:
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)

在您的情况下,您可能希望拥有

config.autoload_paths += %W(#{config.root}/lib)

非常感谢!那我需要加载我的模型文件呢?Rails也无法识别JSON,尽管它是内置的。有些有趣的事情发生了! - Albus Dumbledore
关于JSON - 看起来我需要这样调用它:ActiveSupport::JSON,然后它就可以工作了。 - Albus Dumbledore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接