ruby-on-rails - 访问 Ruby 模块中的其他方法

标签 ruby-on-rails ruby

我正在编写我的第一个 Rails gem,它向 ActiveRecord 添加了一个方法。我似乎想不出一种简单的方法来从我添加到 ActiveRecord 的方法中调用其他方法。有没有我应该使用的模式?

module MyModule

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

  module ClassMethods

    def my_class_method
      # This doesn't work
      some_utility_method
    end

  end

  def some_utility_method
    # Do something useful
  end

end

ActiveRecord::Base.send(:include, MyModule)

最佳答案

一旦您包含了 MyModuleActiveRecord::Base 将拥有 my_class_method 作为方法(等效地,Class 对象 ActiveRecord::Base) 的实例方法,以及 some_utility_method 作为实例 方法。

因此,在 my_class_method 中,selfClass ActiveRecord::Base,而不是它的一个实例类(class);它没有 some_utility_method 作为可用方法

编辑: 如果你想要一个模块私有(private)的实用方法,你可以这样做:

module MyModule

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

  module ClassMethods

    def my_class_method
      # This doesn't work
      MyModule::some_utility_method
    end

  end

  def self.some_utility_method
    # Do something useful
  end

end

ActiveRecord::Base.send(:include, MyModule)

关于ruby-on-rails - 访问 Ruby 模块中的其他方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216418/

相关文章:

javascript - 使用 Ruby/Sinatra 将数据传递到 Highcharts 的更好方法?

ruby - Ubuntu 8.10 上的 Phusion 乘客 : how to setup gem directory and users?

ruby - 如何使用 Watir 在没有图像的情况下启动 Chrome?

ruby-on-rails - 如何使用属性填充 PDF 网络表单

ruby-on-rails - Rails 4.0.0、Neo4j - Bundler 找不到 gem "railties"的兼容版本

ruby-on-rails - 如何在 Ruby on Rails 中解压缩文件?

ruby-on-rails - Active Record 对象重新加载和重新加载!?

ruby-on-rails - Belongs_to 与主键和外键的关联

ruby-on-rails - 如何使用命令提示符在 Windows 7 上的 Sublime 中打开 ruby​​ gem?

ruby - 从 Ruby 中的主机名获取 IP 地址