Где должен находиться мой немодельный/неконтролируемый код?
Я написал приложение rails, которое следует за обычной структурой каталогов (код модели в моделях, код контроллера в контроллерах).
Но теперь я работаю над новой функцией, и для этого я написал несколько (что бы я назвал) "сервисным" кодом.
Новая функция заключается в том, чтобы импортировать некоторые данные в систему, на данный момент это два класса для импорта, но может расширяться до более.
Я не верю, что новый код принадлежит модели, поскольку он не моделирует какой-либо объект (он напрямую не связан ни с одним объектом.
Я, конечно, не думаю, что это принадлежит контроллеру, поскольку это не логика представления.
Итак, я создал каталог "приложения/службы" и разместил его там.
Я также создал каталог "test/services", где я поставил свои тесты.
Все хорошо и хорошо, что я думал, но когда я запускаю "rake: test" или "autotest", мои тесты новых сервисов не выполняются.
Теперь я ожидаю, что есть способ заставить рейк забрать их, но разве это предупреждающий флаг, что я сделал что-то неправильно?
Есть ли другое место, в котором должен жить код, или я так или иначе не делаю "путь Rails"?
Как правило, всякий раз, когда я сталкивался с такой проблемой, прежде чем я обнаружил, что у рельсов уже есть решение, но я не знал об этом соглашении.
Это один из этих случаев?
Ответы
Ответ 1
Вот что такое папка "lib".
Папка lib находится в автоматически просматриваемом пути, поэтому вы можете иметь
class MyFoo
end
в lib/my_foo.rb
, а затем просто позвонив
MyFoo.new
от контроллера будет загружен код без необходимости require 'my_foo'
Ответ 2
./lib - определенно место, куда можно идти.
Другое место, которое нужно положить в каталог инициализаций в config, зависит от того, что вы делаете. Вы также можете подумать о том, чтобы все это было в плагине, но если это небольшая функциональность, вероятно, это не стоит.