Rails自动加载和gem类

时间:2014-03-06 20:02:03

标签: ruby-on-rails gem autoload

所以我有一个包含ActiveRecord模型的宝石

# one of 30 or so models used by a suite of applications
class MyModel < ActiveRecord::Base
  # some library code
end

# in Rails app, I want to add some behavior to this model using good old ruby class reopening
class MyModel < ActiveRecord::Base
  scope :active, { where active: true }
end

问题是我的应用程序原生版本的这个模型只是由于Rails自动加载。由于它是由库加载并且常量已注册,因此它永远不会转到本地模型来添加本地定义的行为。

如果初始化程序具有对模型的本地版本的硬编码列表,那么我怎样才能让这两个类的定义结合起来以最终得到一个具有所有行为的类? / p>

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是:

在您的gem中,将模型名称更改为更通用的名称(MyModelTemplate)并将其设为抽象:

class MyModelTemplate < ActiveRecord::Base
  self.abstract_class = true
  # some library code
end

让您的真实模型继承MyModelTemplate:

class MyModel < MyModelTemplate
end