如何添加像has_many和devise_for这样的全局Rails助手?

时间:2014-11-08 00:20:12

标签: ruby-on-rails ruby oop inheritance include

在Rails中,我想同时将功能应用于许多模型,并且能够在将来将其添加到其他模型中。

我正在寻找类似......

的东西
class Stuff < ActiveRecord::Base
  some_tag
end
class Thing < ActiveRecord::Base
  some_tag
end

给那些和任何其他模型

some_tag

的功能
class Functionality

  has_many :other_things, polymorphic: true

  def does_something
  end

end

1 个答案:

答案 0 :(得分:1)

第一步:使用您要添加到类中的方法创建一个模块:

module FooFunction
  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    def does_something(options = {})
      ...
    end
  end
end

下一步:将该模块纳入课程

# in config/initializers/foo_function.rb
class Object
  include FooFunction
end