重新打开包含Mongoid :: Document的类

时间:2012-02-28 15:55:30

标签: ruby-on-rails ruby mongoid

我有一个简单的课程:

class User
  include Mongoid::Document
  field :name
end

我想重新打开它以添加一个Mongoid回调:

class User
  before_create :do_this
  def do_this
    # do it...
  end
end

不幸的是我收到了错误:undefined method 'before_create' for User:Class

知道怎么做吗?我应该使用mixin模式而不是重新打开吗?

UPDATE :我无法更改原始类定义,因为它位于共享库中。加载顺序很棘手,因为它在Rails中。原始类位于autoload_path中加载的文件中。我应该在哪里重新打开它?我宁愿使用模块而不是重新打开,但我不确定是否可以“从外部”包含我的模块!

更新2 :您说得对,这只是一个加载订单问题。所以现在我的问题变成了:由于Rails的自动加载是懒惰的,如何在加载原始类文件后强制Rails加载重新打开的文件? :)

1 个答案:

答案 0 :(得分:1)

上面的代码在控制台中为我工作。我怀疑第一类声明是先加载的。您可以尝试在每个类声明中立即打印出一条消息,例如

class User
  puts "First"
  ...
end

...

class User
  puts "Second"
  ...
end

并验证它们是否以正确的顺序加载。

此外,如果您确实可以访问第一个类声明,则可以使用mixin,因为它可以将User类的所有内容保存在一个位置。

更新:您是否可以首先加载/要求共享的User类以确保它已加载?那就是:

require 'app/models/user'

class User
  before_create :do_something
  def do_something
    ...
  end
end