【发布时间】:2013-04-01 00:25:00
【问题描述】:
Rail 自动加载丢失的常量让我很受宠若惊。在 Ruby 中,如果我有两个类,一个嵌套在另一个内部但在不同的文件中,我如何要求它们,因为它们相互依赖(循环依赖)。
# user.rb
class User < ActiveRecord::Base
serialize :preferences, User::Preferences
end
# user/preferences.rb
class User::Preferences
end
# user_spec.rb
require 'user'
require 'user/preferences'
注意:我不需要 Rails 环境。
如果我先尝试加载用户,代码会失败,因为它还不知道User::Preferences。如果我先加载“用户/首选项”,它会在加载用户时失败,因为现有的用户类不是 ActiveRecord 的子类。
我怀疑我需要删除循环依赖,或者,如果可能的话,通过传递一个字符串 'User::Preferences' 来使 serialize 延迟加载类,该字符串在需要时转换为常量。
【问题讨论】:
-
这不是重复的,它有相同的主题,但不同的问题。在“重复”中,依赖项位于方法调用中,而不是像我的示例代码那样的类主体。在“重复”中实际上没有问题,请注意答案:“Ruby 不是 C++,它不会抱怨 FooSub.SOME_CONSTANT 直到您调用 Foo#foo() ;)”。对我来说这是不正确的,因为我的依赖项在类主体中,一旦加载类就会调用它,而不是在加载依赖项后的某个未来点。
标签: ruby ruby-on-rails-3