2015-06-25 41 views
1

我是rails的新手。我爲特定項目創建了一個報告模塊。現在,我們希望在所有項目中都具有通用性,比如報告寶石。我的問題不在於如何創建&使用寶石。我的問題是「如何製作通用報告庫」。例如。我在報告中的輔助模塊,在rails中創建通用模塊

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

我的方法:每個項目將包括LibQuery ::助手,也將包括其自己的常量文件。

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

但我想知道如果這是最優雅的做事方式?或者有更好的方法來做到這一點?

+0

尊重約定:模塊和類必須是大寫 – apneadiving

回答

0

首先,所有的模塊都必須大寫:

module MyModuleName 

其次,使用lib這是最好的,包括它在autoload_paths(在你的application.rb文件)這樣

config.autoload_paths += %W(#{Rails.root}/lib/my_shared_libs) 

這意味着導軌會自動加載它,並且您可以「開箱即用」。

第三,外部模塊不應該依賴於基於項目的模塊和類,因爲整個目標是使它們易於重用。

所以它歸結爲:

#/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' 
+1

好。讓我試着以其他方式問問!我有一個模塊中的所有常見功能!該函數僅在包含一些常量文件時纔有效。常量文件根據每個項目而有所不同。現在,重用模塊的最佳方法是什麼? – ErRoR