2

Обычно есть много моделей в Ruby, Rails на проекте, так:Должны ли модели размещаться в Rails?

  1. Это хорошая практика, чтобы пространство имен их (в модулях/папок)? Каковы недостатки? EG:

    • Магазин
      • category.rb
      • details.rb
    • Продукты
      • category.rb
      • base.rb

    и т.д.

    (вместо ShopCategory, иметь магазин :: Категория?)

  2. Следует также контроллеры быть пространство имен таким же образом?

+1

Для тех, кто прибыл долго, после того, как был задан вопрос, помните, что сегодня это часто известно как [ведущий] (http://en.wikipedia.org/ wiki/Model% E2% 80% 93view% E2% 80% 93presenter), [decorator] (http://en.wikipedia.org/wiki/Decorator_pattern) или [интерфейс модели] (http: //en.wikipedia .org/wiki/Marker_interface_pattern) - в зависимости от типа функциональности, хранящейся в рефакторизованном файле. –

ответ

2

Я недавно нашел этот пост, но с 2007 года автор Pratik Naik. Говорит, что пространство имен в моделях на самом деле не похоже на базы данных. Использует что-то вроде ниже. Даже цитата из DHH тоже.

Rails::Initializer.run do |config| 
    # Your existing stuff 
    config.load_paths << "#{RAILS_ROOT}/app/models/pets" 
end 

http://m.onkey.org/2007/12/9/namespaced-models

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

2

Я делаю это много.
Так что да, я думаю, это то, что вы должны делать.

Вам будет намного проще просмотреть модели, если вы их разделили в подкаталоги, вместо того чтобы иметь их все в одном и том же.

Такая же рекомендация также применима для ваших контроллеров и ваших видов.

+0

Спасибо, Дэмиен. Это то, о чем я говорил, разбивая их на подпапки (и, конечно же, уважать соглашения о рельсах, включая их в соответствующие модули). –

-3

Я рекомендую использовать однонаправленное наследование для вашей модели категории. Например:

Category < ActiveRecord::Base end 

ShopCategory < Category end 

ProductCategory < Category end 

Shop < ActiveRecord::Base 
    belongs_to :shop_category 
end 

Product < ActiveRecord::Base 
    belongs_to :product_category 
end 

Это инкапсуляции обычно используется поведение категории и атрибуты в одной модели и может позволить вам повторно использовать много кода и есть один контроллер. Использование namespacing имеет смысл только тогда, когда базовые классы имеют какие-то общие данные/функциональные возможности. (пример: act_as_versioned создает имена классов версии, помещенные под моделью)

+2

Это не то, для чего предназначен ИППП. И это не делает ваши модели более читаемыми вообще, наоборот. Я бы этого не сделал. –

+0

Namespacing не имеет ничего общего с общей функциональностью. Он предназначен для того, чтобы различать разные классы, которые имеют имя. – meagar

Смежные вопросы