2011-11-22 26 views
1

我有一個簡單的應用程序,用戶可以在其中管理卡片組。Ruby on rails - 處理集合時控制器應該是什麼樣子?

在我的模型,我有:

  • DeckOfCards

在我看來/ DeckOfCards /:ID /編輯

我想允許用戶創建新卡並將其添加到當前卡組。

我現在有一個的form_for幫手職位向/卡/新

如果我的卡控制器被硬編碼到重定向回DeckOfCards?如果後來我想獨立於卡組創建卡片會怎麼樣?

我正在考慮的另一種可能的方法是在我的DeckOfCards控制器上處理這種情況的自定義操作。如果我這樣做,有沒有辦法使用表單助手,或這樣做需要我回發給我創建的對象相關的控制器?

我喜歡軌道帶來的結構,但是當處理多個實體時,我並不清楚架構應該是什麼樣子。我擔心如果我濫用這些範例,我會在一個痛苦的世界中結束!

你能推薦一個更靈活的方法來解決這個問題嗎?

感謝所有幫助

+0

是ajax的一個選項嗎?那麼你不必擔心重定向。 –

回答

3

的設置應該是很簡單的:

你說你有兩種型號:卡和DeckOfCards。完善!

現在,在您的路線:

resources :cards 
resources :deckofcards do 
    resources :cards, :controller => "cardsindeck" # gives you, e.g. <root>/deckofcards/1/cards/5/show 
end 

現在你需要兩個不同的控制器,用於卡:


CardsController:處理CRUD查詢卡獨立於DeckOfCards(你仍然可以有鏈接存在的DeckOfCards卡屬於)

CardsInDeckController:通過DeckOfCard處理卡片


在CardsInDeckController中,您可以訪問params[:deckofcards_id](例如params[:deckofcards_id])所屬的DeckOfCards。在你的新動作中:

@card = DeckOfCards.find(params[:deckofcards_id]).cards.build 
+2

這看起來不錯。請注意,blackbird07擁有自己的卡牌路線以及一副卡牌的背景。這很好!這樣做的好處是,您可以按照您的要求指定編輯單張卡片,並且可以在桌面環境中編輯卡片。這樣做的嵌套將極大地幫助您提供您可以使用的路線。嘗試'rake routes'來查看所有可用的路徑助手。 –

+1

n.b.雖然我們正在考慮'路由嵌套',但您也可以使用與其他模型具有'accep_nested_attributes_for'的模型使用表單行詳細信息(例如給定桌子的卡) –

+1

非常感謝您詳細闡述解決方案,@MichaelDurrant這一定幫助! – emrass