Rails: Где вы размещаете немодельный код? - PullRequest
6 голосов
/ 24 сентября 2010

Я новичок в Rails и изучаю Rails 3 на стороннем проекте. Есть моменты, когда я хочу написать некоторый код, который не принадлежит моим моделям или контроллерам - проблемы, связанные с моделью и / или контроллером, но я не хочу загромождать любой из них деталями реализации из того, что я пишу.

Например: проект, который я строю, использует систему авторизации Janrain (RPX), поэтому я могу получить авторизацию oauth, openid, google и т. Д. есть хороший кусок API-кода, который они предоставляют, поэтому мне не нужно писать все самому. этот код не принадлежит ни контроллеру входа, ни пользовательскому модулю. это код авторизации, поэтому он должен быть доступен для контроллера входа, но он не является частью этого контроллера.

Где вы положили этот код? это не код модели. он не принадлежит контроллеру.

... заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 24 сентября 2010

Вы должны иметь возможность использовать папку lib в своем корневом каталоге (если только она не изменена в Rails 3). Оттуда вы можете ссылаться на классы без оператора require.

4 голосов
/ 18 июля 2012

«Обычное» предложение состоит в том, чтобы сказать «поместите этот материал в lib». Но есть и другие места для рассмотрения:

  1. Рассмотрите возможность создания подпапки в app. Вот некоторые примеры: app/workers, app/observers, app/sweepers или что-то еще, что имеет для вас смысл.

  2. Попробуйте использовать config/initializers для кода инициализации.

  3. Наконец, и только если вышеприведенное не имеет смысла, вы можете использовать lib. Не забывайте, что вы можете использовать подпапки, чтобы не допустить чрезмерного использования.

И как только вы все заработаете и отработаете, подумайте о том, чтобы извлечь свой код в gem. См., Например, RailsCast на Создание нового драгоценного камня с Bundler .

...