2011-01-07 2 views
31

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

Это плохая идея? Что это за рельсы?

+0

Более 100 моделей? Это большой проект? –

ответ

62

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

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

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

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

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

Первый способ прост, но на самом деле это не самый лучший способ. Второй способ включает ваши разделяет пространства имен моделей с группами они. Это означает, что вместо того, чтобы 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's in the same namespace 
end 

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

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

+0

Вам не нужно добавлять подкаталоги в путь загрузки, поскольку приложение/модели уже есть. Путем ссылки на вложенную модель, такую ​​как 'User :: Group', Rails автоматически загрузит ее, посмотрев на эти пути. Все константы 'app' загружаются в режиме производства. –

+0

@ Ryan Да, если вы пропустите свои модели. Однако, если вы * не * namespace их, но все же помещаете их в подпапки, и не добавляете пути к 'config. autoload_paths', они не будут загружаться. – vonconrad

16

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

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

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

Watch вывода сценария и просматривать созданные файлы.

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