2013-04-02 60 views
1

在我的應用程序Users可以LikePrograms。其中每一個都是一個模型,Like是多態的。我應該使用哪種導軌控制器?

在某些時候,我會想看到所有的UsersLike一個Program或全部Programs一個User Likes

usersprograms控制器中有likeslikers控制器動作是更好嗎?或者我應該使用和programs操作(或檢查正在使用哪個嵌套資源的索引)將likes控制器作爲嵌套資源?

我意識到所有這些都可以工作,但不確定什麼是Rails最佳實踐。

回答

1

我會構建您的應用程序,讓UsersControllerlikes成員操作返回用戶喜歡的Program。然後有一個ProgramsControllerlikers成員操作,該操作給出User這樣的程序。

爲了進一步簡化事情,你也可以只包括用戶在show動作喜歡,(同樣,顯示誰喜歡在節目中的show行動方案的用戶),雖然你可能會獲取更多的信息比通過這樣做在show行動中必需。

+0

決定這些事情時是否有一般的經驗法則?像少控制器更好? – dewyze

+0

如果你創建了一個'LikesController',它的資源將是一個「like」,這聽起來就像你場景中的「join model」。您的描述使您看起來好像要麼訪問由特定用戶或特定程序組織的「喜歡」,因此在UsersController或ProgramsController上將喜歡的內容呈現爲動作更有意義。 –

1

安靜地,你會有一個LikesController和一個'創建'行動,它會採取一個user_id和一個program_id。很可能用戶會登錄(並不會在URL中傳遞),這將是有意義的創建一樣,傳遞一個program_id到URL看起來是這樣的:

POST /likes, :params => { :program_id => ___ } 

你可能想要顯示喜歡(索引頁)列表,也許允許用戶編輯和刪除。如果是這種情況,所有的操作都會在likes_controller上。通常情況下,這取決於你的情況,但一個平靜的設計通常是正確的開始。

+0

類似的是通過AJAX完成的。有創建和銷燬操作,該部分工作正常。 我需要喜歡作爲一個嵌套的資源在用戶和程序下,以保持在喜歡的控制器的行動。在用戶和程序控制器中似乎更容易...但它感覺不太RESTful。 – dewyze

+1

我明白了。如果您正在查找程序列表,這些列表將位於ProgramsController的索引操作中。它可能被user_id過濾,並具有像用戶/ 1 /程序的URL。但是,也有可能你真的想要喜歡用戶/ 1 /喜歡。如果是這樣,我只需簡單地添加一個方法來在likes控制器上的索引操作中過濾喜歡的內容。我使用的最後一個選項是爲連接製作控制器 - UserLikesController和ProgramLikesController。唯一的行動就是索引。這很好,因爲你可以在過濾器之前對子類進行子類化並保留權限。 – Swards

+0

Oooo,這是一個有趣的想法。我必須嘗試一下,看看它是如何工作的。 – dewyze