Модели с пространством имен в Rails: в каком состоянии объединение?

С самого начала у Rails были проблемы с моделями с пространствами имен. Со временем почти все отказались от его использования. Я в том числе.

С выпуском Rails 2.3 я хотел бы получить обновленную информацию о ситуации. Конкретные вопросы, которые я имею в виду:

  • Во-первых, хорошо ли идти?
  • именование таблиц, какому правилу следовать?
  • ассоциации, как объявить их с наименьшим многословием? как назвать столбцы внешнего ключа?
  • автоматическое требование, работает ли это, если вы поместите файлы модели в подкаталог, соответствующий пространству имен? или, как назвать и где разместить файлы?
  • генерации, успешно и правильно ли генератор модели обрабатывает пространства имен?
  • поколение, как насчет генератора лесов, который включает в себя контроллеры?
  • какие-либо несовместимости/причуды, о которых следует знать?

person kch    schedule 02.03.2009    source источник
comment
Я понимаю, что мне очень лень задавать этот вопрос, так как я мог бы быстро найти большинство ответов сам, но я здесь в надежде, что кто-то уже прошел через много боли и хочет поделиться этим.   -  person kch    schedule 02.03.2009
comment
Я думаю, это хороший вопрос. Я с нетерпением жду того, что вернется, потому что я еще один, кто хотел этого, пробовал, чувствовал боль и сдался.   -  person Mike Woodhouse    schedule 02.03.2009
comment
Этот вопрос уже довольно старый. Мне любопытно, как дела улучшились после выхода Rails 4.0.   -  person Andrew    schedule 12.07.2013


Ответы (3)



Недавно у нас были большие дебаты по этому поводу внутри нашей компании. Я думаю, в конце концов, мы поняли, что если вы не можете создавать пространства имен для таблиц внутри базы данных, нет смысла создавать пространство имен для моделей. Мы решили добавить префикс к нашим моделям (User, UserAddress, UserEmailAddresses) и поместить их в каталог пользователей, а затем использовать:

config.load_paths << "#{RAILS_ROOT}/app/models/users"

для загрузки моделей. Чтобы контролировать многословие в наших моделях, мы часто делаем это:

has_many :addresses, :class_name => "UserAddress"

При генерации мы создаем его так, как будто пространства имен нет (скрипт/генерируем модель UserAddress), затем вручную копируем в каталог пользователя.

Пожимайте плечами. Я предполагаю, что в конце концов все это действительно дает вам более чистую структуру каталогов, что на самом деле создает больше проблем для пользователя VIM, такого как я, но хорошо для TextMaters.

person efalcao    schedule 04.03.2009
comment
На самом деле, как TextMater, я должен сказать вам, что я использую cmd+T для перехода к файлам, я редко использую файловый браузер. В любом случае, это умеренно полезно, но вы говорите, что пробовали пространство имен в rails 2.3, и это все еще SOL? - person kch; 05.03.2009
comment
Я использую что-то похожее на cmd+T в VIM, и хорошая вещь в размещении вещей в папках заключается в том, что вы можете сделать m/u/ и cmd+T, вероятно, сузится до моделей/пользователей/, что очень полезно (большинство команд +t пользователи не понимают, что косая черта сужает список по каталогу) - person efalcao; 05.03.2009
comment
Отвечая на остальную часть вашего вопроса, мы не пробовали это в версии 2.3. Кроме того, я не видел в изменениях версии 2.3 ничего, что конкретно выделяло бы зеленый свет для моделей с пространством имен. - person efalcao; 05.03.2009
comment
если вы не можете создавать пространства имен для таблиц внутри базы данных, нет смысла создавать пространство имен для моделей. Rails позволяет вам иметь несколько логических баз данных (pullmonkey. com/2008/4/21/), так что это все еще хорошая причина для использования моделей с пространством имен. - person Walt Jones; 29.12.2009

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

Мое последнее приложение имеет 87 ресурсов и повсеместно включает административные функции. Я не вижу необходимости в пространстве имен, ИМХО.

person Matt Darby    schedule 04.03.2009
comment
Ну, некоторые люди лучше работают с пространством имен, некоторым все равно. Всегда можно найти обходные пути, черт возьми, во многих языках их нет. Несмотря на необходимость/альтернативы, это вопрос, на который было бы неплохо получить ответ. - person kch; 05.03.2009
comment
Это недальновидное общее заявление. Веские причины для пространств имен связаны не столько с количеством моделей, сколько с их четностью. - person gtd; 01.07.2010
comment
Подождите, пока ваше приложение расширится, и вы попытаетесь заставить новых разработчиков быстро изучить, как работает ваше приложение, и попытаться привести этот аргумент. - person jwg2s; 07.07.2012