2015-06-25 6 views
1

Я новичок в рельсах. Я создал модуль отчетов для конкретного проекта. Теперь мы хотим сделать его обобщенным во всем проекте, как gem. Мой вопрос не о том, как создать & использовать драгоценный камень. Мои вопросы: «Как создать общий отчет lib». Напр. У меня есть вспомогательный модуль в отчетах,Создать общий модуль в рельсах

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

уважение конвенции: модули и классы должны быть капитализированы – 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

Смежные вопросы