Модели с пространством имен в Rails:Каково состояние союза?
-
03-07-2019 - |
Вопрос
С самого начала у Rails были проблемы с моделями в пространстве имен.Со временем почти все отказались от его использования.Я в том числе.
С выходом Rails 2.3 я хотел бы получить обновленную информацию о ситуации.Конкретные вопросы, которые я имею в виду:
- во-первых, можно ли идти?
- именование таблиц, какое правило соблюдать?
- ассоциации, как их объявить с наименьшим многословием?как назвать столбцы внешнего ключа?
- автоматическое требование, работает ли это, если вы поместите файлы модели в подкаталог, соответствующий пространству имен?или как назвать и куда разместить файлы?
- поколения, успешно ли и правильно ли генератор моделей обрабатывает пространства имен?
- поколение, а как насчет генератора лесов, который включает в себя контроллеры?
- какие-нибудь несовместимости/причуды, о которых следует знать?
Решение
Лучшая рецензия, которую я видел по этому вопросу, принадлежит Строго нетипизированный.Насколько мне известно, версия 2.3 не решила никаких проблем, а это значит, что они все еще ненадежны.
Другие советы
Недавно у нас в компании были большие дебаты по этому поводу.Я думаю, в конце концов мы пришли к выводу, что если вы не можете разместить таблицы пространств имен внутри базы данных, нет смысла создавать пространства имен для моделей.Мы остановились на префиксах наших моделей (User, UserAddress, UserEmailAddresses) и поместили их в каталог пользователей, а затем использовали:
config.load_paths << "#{RAILS_ROOT}/app/models/users"
для загрузки моделей.Чтобы контролировать детализацию в наших моделях, мы часто делаем это:
has_many :addresses, :class_name => "UserAddress"
При генерации мы создаем его так, как если бы пространства имен не было (скрипт/генерируем модель UserAddress), а затем вручную копируем его в каталог пользователя.
Пожимаю плечами.Я думаю, что в конечном итоге все это действительно дает вам более чистую структуру каталогов, что на самом деле доставляет больше проблем для такого пользователя VIM, как я, но приятно для TextMaters.
Я бы все равно держался от этого подальше.Все полученное (я, честно говоря, не уверен, что это будет) определенно будет потеряно, если учесть хлопоты и потерю краткости и ясности в вашем коде.
Мое последнее приложение содержит 87 ресурсов и повсюду включает функции администрирования.ИМХО, я не вижу необходимости в пространстве имен.