我是铁杆的新手。我为特定项目创建了一个报告模块。现在,我们希望在所有项目中使其成为通用报告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
但我想知道这是否是最优雅的做事方式?或者更好的方法吗?
答案 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'