在rails中创建通用模块

时间:2015-06-25 09:10:55

标签: ruby-on-rails ruby generics

我是铁杆的新手。我为特定项目创建了一个报告模块。现在,我们希望在所有项目中使其成为通用报告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

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

1 个答案:

答案 0 :(得分:0)

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

module MyModuleName

其次,要使用lib,最好将其包含在autoload_paths(在application.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'