2011-11-22 64 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