2013-09-27 3 views
0

Кажется, что я застрял в 40 разных моделях в одной папке с именами, такими как post.rb, post_comment.rb, post_rating.rb и т. Д. Есть ли способ сделать что-то вроде модулей в rails, namespacing прочь все с сообщениями в отдельный каталог? (Этот каталог может включать в себя различные контроллеры и представления).Лучшая файловая структура Rails для больших проектов?

Rails Двигатели кажутся многообещающими, но, возможно, есть что-то еще, что я пропустил?

Я думаю, что это облегчит обзор проекта и станет новым сотрудником.

Если у вас есть мнения, пожалуйста, сообщите!

ответ

2

Я использую пространства имен.

Когда вы запустите команду rails g scaffold blog/post, она будет генерировать Post в пространстве имен блогов.

приложение/модели/blog.rb

module Blog 
    def self.table_name_prefix 
    'blog_' 
    end 
end 

приложение/модели/блог/post.rb

class Blog::Post < ActiveRecord::Base 
    has_and_belongs_to_many :categories 
end 

приложение/модели/блог/category.rb

class Blog::Category < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
end 
0

В качестве примера вы можете разместить все свои модели post_*.rb в папке posts. Обязательно переименуйте каждую модель в папке с помощью Posts::Post*, т.е. class Posts::PostRating < ActiveRecord::Base

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

Соответствующие чтения:

1

Кажется, ваше моделирование имеет некоторые проблемы.

Комментарий является комментарием. Сообщение может содержать комментарий, фотография может содержать комментарий. Но определенно не очень хорошая практика иметь такие модели, как post_comment, photo_comment. Ну, я вижу только «post_comment», но, думаю, вы назовете это по этой причине.

Вы будете заняты, чтобы следить за этими моделями с аналогичными функциями, а затем их контроллером, их представлениями. То же самое верно для «post_rating» и т. Д.

Я бы не сказал, что 40 моделей слишком много. Но, увидев, что новый Basecamp имеет более 50 моделей, и у Dispora есть 30 моделей без подпапок, может потребоваться обзор архитектуры вашего приложения, чтобы вырезать некоторые.

Если вы планируете использовать «комментарий», «рейтинг» для других, таких как «фотография», вы можете напрямую использовать имя и планировать ассоциации, полиморфные модули для СУШЕГО кода.

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