2010-10-25 3 views
21

Я новичок в Ruby on Rails, и мои вопросы касаются дизайна приложения, основанного на Rails 3. В Rails существует множество данных о создании стандартных веб-сайтов (таких как блоги), но мое приложение требует больше, чем просто «писать и читать», и я не уверен, как это реализовать.Ruby on Rails: где я должен хранить модули?

Идея:

  1. Модель "Маршрут" включает в себя ряд авиакомпаний модулей: "Ryanair", "Easyjet" и т.д.
  2. Метод "Route.Update" называет "UpdateRoutes" на каждом модуле авиакомпании (например, «Ryanair.UpdateRoutes», «easyJet.UpdateRoutes»)
  3. Он должен работать таким же образом с большим количеством моделей (таких как «Flight.find») и другими авиакомпаниями («Delta.FindFlights»))

Квесто ns:

  1. Где я могу хранить все модули? Я не вижу ни одной папки приложений/модулей в Rails.
  2. Если мои модули требуют драгоценных камней, следует ли включать их в модули или модели (где они фактически используются)?
  3. Я хочу сделать приложение масштабируемым. Например, я хочу добавить новую рабочую авиакомпанию (модуль) без изменения кода в «Маршрут», «Полет» или любую другую модель. Я представляю себе что-то вроде метода «IncludeAirlines», который будет проходить через модули/авиакомпании/, имя .rb, включать в себя каждый модуль и вызывать необходимый его метод (например, имя .UpdateRoutes). Есть ли лучший способ реализовать это в Ruby on Rails?

ответ

33

Как вы знаете, модули обычно используются как пространства имен или как миксины.

Где вы размещаете модуль, зависит от того, насколько жестко связан модуль с каталогом приложений. Несколько моделей в хранящих модулях:

  1. /Библиотека каталог, если модуль не особенно «взаимодействовать» или беспокойство приложения/и вы обращаетесь модуль в качестве внутреннего плагина.

  2. Каталог приложений/моделей был бы подходящим местом, если ваш модуль является центральным для вашей бизнес-логики. Популярный пример использования здесь - это то, где вы используете модуль как mixin для DRY для ваших моделей/контроллеров.

  3. 37 Signals introduced a pattern of treating them as 'concerns' и хранение их в приложении/проблемах.

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

Ваш третий вопрос непонятен. Извини за это. Не совсем уверен, что вы пытаетесь сделать.