2009-12-28 49 views
1

我正在使用REST風格開發我的最新rails應用程序。然而,我在上下文中遇到了一些問題。比方說,我有一個項目模型。我正在使用編輯/更新來處理處理,但根據上下文,模型編輯方式不同。rails,REST和上下文

有時候我所做的只是改變一個'狀態'屬性而不需要顯示整個表單。在其他情況下,我可以編輯關聯對象以及主對象,然後有用戶權限來考慮。某些用戶可以編輯某些屬性,而其他用戶則不能。即使成功更新後存儲在閃存中的確認消息也不盡相同。

所有這些操作本質上都是編輯/更新,但不同的上下文使其更加複雜。現在我對每種類型的更新使用不同的操作,例如,更改狀態由/ items/mark_as_sold處理。我可以做到的另一種方式是在調用中使用url參數來編輯或更新,並根據上下文對請求進行不同的處理,但這會變得混亂。

其他開發人員如何處理這些情況?有沒有'軌道'來做到這一點?

感謝 EV

回答

2

我以任何方式on Rails的不是專家或休息。但我會在編寫自己的同時推測以下指導原則。

  1. 將一切視爲資源,並堅持資源上的修改/查看的休息方式。因此,這意味着節目獲取一條記錄顯示,索引將獲得全部,一個帖子將創建新的,放置將編輯和刪除將銷燬。
  2. 就目前而言,關注整個表單是否需要顯示,這是一種觀點責任。嚴格意義上說,控制人員的工作是路由到正確的模型並返回到正確的視圖。除了要渲染的格式和其他一些微不足道的東西之外的任何其他邏輯;不屬於管制員。
  3. 如果您要決定是要顯示整個表單還是隻顯示一個字段,那麼這個決定應該由你的觀點來處理。 (JS可以在jquery中扮演很重要的角色,並且喜歡全面使用;可以在客戶端更好地控制你的視圖)。控制器可能會在模型上調用update_attributes,這會讓您在要更新的屬性數量方面具有靈活性。
  4. 權限邏輯應限制爲模型,並根據權限,只應提供選擇性數據。

我有一個特定的方法,我喜歡我的所有網絡應用程序。只要可能,視圖和控制器之間應該使用JSON。這有兩個好處;它很好地分離了視圖和控制器的角色,並節省了任何無意的重疊。 它可以讓您將控制器作爲API公開給整個世界,並有效地重用它們。 (除了可能需要的某些許可/訪問相關的過濾外)

  1. 相關資源可以使用嵌套REST風格的更新進行更新。我喜歡那種特別的風格,但喜歡保持資源的深度。

即使您調用update_attributes方法,甚至可以使用相同的REST更新操作更新單個標誌。你真的不需要把所有東西都作爲URL中的一個參數。

我只是相信,使用鐵路的體系結構,它是最大的潛力;您只需擁有正確的設計,並且始終可以採用其他方式來保持REST範式和Rails慣例。

如果你可以提供任何一段代碼;你覺得他們會被侵犯;那麼請分享,也許我們都可以建議改進設計。

乾杯

1

關於管理權限: 您可以隔離控制器爲依賴權限的多個控制器。這可以通過使用指南帖子http://icebergist.com/posts/restful-admin-namespaced-controller-using-scaffolding完成。 關於上下文決策: 根據權限將控制器拆分爲兩個/多個後,可以假定角色的所有用戶都路由到正確版本的控制器操作。所以,如果你使用相同的更新方法來更新整個模型或者只是一些屬性,這應該不成問題。