使所有Rails模型继承自某个类

Jas*_*ett 0 ruby-on-rails

我为我的一个模型写了一个upsert方法.我希望我的所有模型都有这种upsert方法.在我看来,逻辑解决方案是定义一个继承的模型,ActiveRecord::Base然后让我的所有其他模型继承.但是如果我这样做,Rails会抱怨我创建的新模型没有表可以使用它,这是真的,但我不在乎.

既然我尝试的方式显然不是正确的方法,那么正确的方法是什么?

Dan*_*nne 7

您可以使用模块扩展ActiveRecord.您只能在一个地方进行,并且可以从继承ActiveRecord的所有模型访问它.

module YourModule
  def self.included(recipient)
    recipient.extend(ModelClassMethods)
    recipient.class_eval do
      include ModelInstanceMethods
    end
  end # #included directives

  # Class Methods
  module ModelClassMethods
    # A method accessible on model classes
    def whatever

    end
  end

  # Instance Methods
  module ModelInstanceMethods
    #A method accessible on model instances
    def another_one

    end
  end
end

#This is where your module is being included into ActiveRecord
if Object.const_defined?("ActiveRecord")
  ActiveRecord::Base.send(:include, YourModule)
end
Run Code Online (Sandbox Code Playgroud)