这个设计问题需要一些背景知识,所以请耐心等待。Rails RESTful控制器与查看特定控制器
我目前有三种型号都走这样的:
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
关联)和内联表单来创建新的对象和关联的MyListItem
。这些内联操作在很大程度上依赖于partials和RJS。
现在我有两个选择:
我能控制的方法例如方便,在这两个
MyItemController
和MyListController
,其中每个负责其相关的视图创建一个新的MyItem
。这略微违反了DRY原则,但它简化了渲染/重定向逻辑以及部分/ RJS与控制器操作的关联。或者我可以将表格和AJAX链接从
MyList
视图提交到MyItemController
,然后在适当时必须小心地从MyList
中提取部分或RJS。这似乎还要求我在MyList
相关视图中为每个link_to_remote指定一个:controller => my_list。这似乎是一种更加REST风格的方法,并且限制了将一个控制器创建为MyItem
对象,但它在某种程度上使控制器逻辑复杂化。
你更喜欢哪种方法?为什么?