Где должен жить мой код не-модели / не-контроллера? - PullRequest
13 голосов
/ 12 ноября 2008

Я написал приложение rails, которое следует обычной структуре каталогов (код модели в моделях, код контроллера в контроллерах).

Но сейчас я работаю над новой функцией, и для этого я написал некоторый (что я бы назвал) «служебный» код.
Новая функция заключается в том, чтобы импортировать некоторые данные в систему, на данный момент импорт выполняется двумя классами, но может расшириться до большего.

Я не верю, что новый код принадлежит модели, поскольку он не моделирует какой-либо объект (он также напрямую не связан с каким-либо отдельным объектом). Я, конечно, не думаю, что он также принадлежит контроллеру, поскольку это не логика представления.

Итак, я создал каталог "app / services" и поместил его туда. Я также создал каталог «test / services», в который я поместил свои тесты.

Все хорошо, подумал я, но когда я запускаю 'rake: test' или 'autotest', мои новые тесты служб не запускаются.
Теперь я ожидаю, что есть способ заставить грабли поднять их, но разве это предупреждающий флаг, что я сделал что-то не так?
Есть ли какое-то другое место, где должен жить код, или я как-то не занимаюсь "Rails way"?

Обычно, когда я сталкивался с такой проблемой, прежде чем обычно обнаруживал, что у rails уже есть решение, но я не знал о соглашении. Это один из тех случаев?

Ответы [ 2 ]

22 голосов
/ 12 ноября 2008

Для этого предназначена папка 'lib'.

Папка lib находится в автоматически найденном пути, поэтому вы можете иметь

class MyFoo
end

в lib/my_foo.rb, а затем просто позвонив

MyFoo.new

из контроллера код будет загружен без необходимости require 'my_foo'

1 голос
/ 12 ноября 2008

. / Lib - определенно, куда пойти.

Еще одно место, куда можно поместить это, находится в каталоге инициализаторов в config, в зависимости от того, что вы делаете. Вы могли бы также рассмотреть возможность превращения всего этого в плагин, но если это небольшое количество функциональности, это, вероятно, не стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...