這個設計問題需要一些背景知識,所以請耐心等待。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
對象,但它在某種程度上使控制器邏輯複雜化。
你更喜歡哪種方法?爲什麼?