Этот вопрос о дизайне нуждается в некотором контексте, поэтому, пожалуйста, потерпите меня.
В настоящее время у меня есть три модели, которые выглядят примерно так:
class MyItem < ActiveRecordBase
has_many :my_list_items
...
class MyList < ActiveRecordBase
has_many :my_list_items
has_many :my_items, :through => :my_list_items
...
class MyListItem < ActiveRecordBase
belongs_to :my_item
belongs_to :my_list
has_many :my_list_item_properties
class MyListItemProperty < ActiveRecordBase
belongs_to :my_list_item
Как видите,Модель MyListItem
- это не просто таблица соединений, но и другие свойства.
В приложении есть два основных вида.Один отображает все MyItems
независимо от того, к какому MyList
он принадлежит, и предоставляет для них стандартные операции CRUD.В другом представлении отображается MyList
, с данными всех его MyListItems
и связанных MyItem
каждого.Это представление позволяет выполнять встроенное редактирование существующих MyItem
объектов (которые связаны со списком через MyListItem
), а также встроенные формы для создания новых MyItem
объектов и связанных MyListItem
.Эти встроенные действия в значительной степени зависят от партиалов и RJS.
Теперь у меня есть два варианта:
У меня могут быть методы контроллера, например, для создания нового * 1024.* в MyItemController
и MyListController
, где каждый отвечает за свои связанные представления.Это небольшое нарушение принципа DRY, но оно упрощает логику рендеринга / перенаправления и связь partials / RJS с действиями контроллера.
Или я могу создавать формы и ссылки AJAX изMyList
представления передаются в MyItemController
, который затем должен позаботиться о рендеринге партиалов или RJS из MyList
, когда это необходимо.Это также требует от меня указать: controller => my_list для каждого link_to_remote в MyList
связанных представлениях.Это, кажется, более подход RESTful и ограничивает создание MyItem
объектов одним контроллером, но это несколько усложняет логику контроллера.
Какой метод вы предпочитаете и почему?