Подтвердить что ты не робот

Это плохая идея, чтобы разделить модели на каталоги?

У меня есть более 100 моделей в моем приложении rails, и только для организации я деля их на папки, все еще находящиеся в основной папке модели, просто чтобы упростить навигацию по проекту и посмотреть файлы, которые связаны между собой.

Это плохая идея? Каков способ рельсов для этого?

4b9b3361

Ответ 1

Нет, это не плохая идея. Многие люди это делают, и я не мог жить без него в больших приложениях.

Есть два способа сделать это:

Во-первых, просто двигайте свои модели. Вы, однако, должны будете сказать Rails, чтобы загрузить своенравные модели (так как они не будут знать, где они). Что-то вроде этого должно сделать трюк:

# In config/application.rb
module YourApp
  class Application < Rails::Application
    # Other config options

    config.autoload_paths << Dir["#{Rails.root}/app/models/*"]
  end
end

Первый способ прост, но на самом деле это не самый лучший способ. Второй способ включает в себя namespacing ваши модели с группами, в которых они находятся. Это означает, что вместо User и UserGroup и UserPermissions у вас есть User, User::Group и User::Permission.

Чтобы использовать это, создайте такую ​​модель: rails generate model User::Group. Rails автоматически создаст для вас все папки. Дополнительным преимуществом является то, что при таком подходе вам не нужно будет указывать полное имя модели для ассоциаций в пространстве имен:

class User < ActiveRecord::Base
  belongs_to :group # Rails will detect User::Group as it in the same namespace
end

class User::Group < ActiveRecord::Base
  has_many :users
end

Вы можете указать количество уровней пространства имен, сколько хотите, поэтому User::Group::Permission будет возможно.

Ответ 2

Для 100 моделей это практически требование. 100 моделей шумно в одном каталоге.

Попробуйте это, чтобы получить представление о пути Rails (tm)

rails new MultiDirectoryExample
cd MultiDirectoryExample
rails generate scaffold User::Photo description:string

Смотрите вывод script и просмотрите сгенерированные файлы.