2010-09-24 2 views
6

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

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

Адрес, куда бы вы не входили? это не код модели. он не принадлежит контроллеру.

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

ответ

5

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

+0

Ударьте меня на 30 секунд :) +1 – Matchu

+1

Rails 3 не требует автоматического использования из lib, поэтому вам нужно явно его потребовать. –

+0

Andrew - мне нужно использовать что-нибудь вроде Rails.root, чтобы попасть в папку lib? или я просто использую 'lib /'? –

4

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

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

  2. Рассмотрите возможность использования config/initializers для инициализационного кода.

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

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