保证Rails中的加载顺序

时间:2011-10-10 17:13:03

标签: ruby-on-rails ruby

我有两个Rails项目,我们称之为Foo和Bar。他们共享相同的模型。模型存在于Foo和Bar链接到这些文件。

在一个Foo模型中特定方法的行为需要在Bar中不同:

在项目Foo的模型/ model_a.rb中:

class ModelA
  def method_a
    puts "default behavior here"
  end
end

项目栏中的某个地方:

class ModelA
  def method_a
    puts "special behavior here"
  end
end

以下代码行:

x = model_a.method_a
如果没有Bar不得不弄乱Foo的模型,

在一个项目中的执行方式与在另一个项目中的执行方式不同。如果Foo的模型只是一个宝石,虽然加载顺序问题会有所不同,但是可能存在类似的情况。

我的问题是:此代码段应该放在项目栏中的哪个位置?我如何保证最后加载Bar的混合,以便在项目栏中的运行时执行正确的函数?

1 个答案:

答案 0 :(得分:2)

继承?这就是你所描述的。

如果这是Active Record,那么您可以在Bar应用程序中强制使用表名,然后在那里使用子类。

或者,但我认为这是一个黑客。创建一个名为override_model_a

的初始化程序
require 'modelA'
class ModelA
  # then do your initializing, or include your module here
end

Ruby确实“最后一次获胜”,所以如果您需要原始类,然后在初始化程序中覆盖它,它就会做你想要的。