Ruby on rails 在rails中创建通用模块

Ruby on rails 在rails中创建通用模块,ruby-on-rails,ruby,generics,Ruby On Rails,Ruby,Generics,我是rails的新手。我已经为一个特定的项目创建了一个报告模块。现在,我们想让它像一个报告宝石一样在所有项目中通用。我的问题不是如何创建和使用gem。我的问题是“如何制作通用报告库”。例如,我在报告中有一个助手模块 module Libquery module Helper include QueryConstants(which is dynamic - based on the project) #methods end end 结束 我的方法是:每个项目都将包括L

我是rails的新手。我已经为一个特定的项目创建了一个报告模块。现在,我们想让它像一个报告宝石一样在所有项目中通用。我的问题不是如何创建和使用gem。我的问题是“如何制作通用报告库”。例如,我在报告中有一个助手模块

module Libquery
 module Helper
  include QueryConstants(which is dynamic - based on the project) 
    #methods
   end
 end
结束

我的方法是:每个项目都将包括LibQuery::Helper,还将包括自己的常量文件

module ProjectX
 module Query 
  module Helper
   include Libquery::Helper
   #nothing - inherit all helper methods in libquery
   end
 end
end

但我想知道这是否是最优雅的做事方式?或者有更好的方法吗

首先,所有模块必须大写:

module MyModuleName
其次,要使用
lib
最好将其包含在
自动加载路径中(在
应用程序.rb
文件中),如下所示

config.autoload_paths += %W(#{Rails.root}/lib/my_shared_libs)
这意味着rails将自动加载它,您将有可用的“开箱即用”

第三,外部模块不应该依赖于基于项目的模块和类,因为关键是使它们易于重用

所以归结起来就是:

#/lib/my_shared_libs/fun_things.rb

module FunThings
  ... your code
  def laugh
    puts 'haha'
  end
end

#/models/user.rb

class User
  include FunThings
end

User.new.laugh # => 'haha'

首先,所有模块必须大写:

module MyModuleName
其次,要使用
lib
最好将其包含在
自动加载路径中(在
应用程序.rb
文件中),如下所示

config.autoload_paths += %W(#{Rails.root}/lib/my_shared_libs)
这意味着rails将自动加载它,您将有可用的“开箱即用”

第三,外部模块不应该依赖于基于项目的模块和类,因为关键是使它们易于重用

所以归结起来就是:

#/lib/my_shared_libs/fun_things.rb

module FunThings
  ... your code
  def laugh
    puts 'haha'
  end
end

#/models/user.rb

class User
  include FunThings
end

User.new.laugh # => 'haha'

尊重约定:模块和类必须大写。尊重约定:模块和类必须大写。让我试着用另一种方式问!我有一个模块中的所有常用函数!该函数只有在包含一些常量文件时才能工作。常数文件因每个项目而异。现在,重用模块的最佳方法是什么?好的。让我试着用另一种方式问!我有一个模块中的所有常用函数!该函数只有在包含一些常量文件时才能工作。常数文件因每个项目而异。现在,重用模块的最佳方法是什么?