2012-08-08 48 views
4

在构建Rails应用程序时,我最近遇到了一种情况,我希望可以在多个其他资源的上下文中访问资源,并根据上下文采取稍微不同的行为。处理这样的事情的最佳方式是什么?目前,我通过将资源嵌套到多个父资源中来处理这个问题。然而,这已经变得有些麻烦了,我想知道是否有更好的方法来做到这一点。在多个位置嵌套导轨资源


例子:

说我有一个UserRights模式,我希望用户能够查看,创建和在任何单个用户或整个的情况下编辑这些权利用户的组:

resources :users do 
    resources :user_rights, context: :user # params[:context] = :user 
end 

resources :groups do 
    resources :user_rights, context: :group 
end 

这将生成路线:

users/:user_id/user_rights/:id 
groups/:group_id/user_rights/:id 

然后,在控制器中,我根据上下文处理事情稍有不同。

这使我可以在客户端提供一个相当不错的用户界面,用户可以在其中查看和编辑组拥有的所有权限或用户拥有的所有权限。有没有更好的方法来做到这一点?

回答

0

不需要。您需要的环境越多,不幸的就越复杂。如果您将API添加到应用程序中,则它可能会变得更加复杂,因为通常您需要基本的嵌套资源。我发现的唯一解决方案是通过不创建最常用的路线来达到平衡,然后通过使这些请求符合要求来消除其余的问题。令人困惑,是的!

+0

啊,好的。我想我只是希望在那里有一些最佳实践来处理拥有多个父项的嵌套资源。我想我只需要尽量保持我的代码尽可能干净...... – Ajedi32 2012-08-08 20:40:13

+0

您可以以任何您想要的方式嵌套 - 没有任何限制或处罚(除了创建它们的时间之外) 。所以如果它的逻辑性和对程序员/用户的清晰度有帮助,那就去做吧。我的答案可能更多地受到我用API处理嵌套资源时看到的复杂性的驱动,其中额外代码要求的处罚很高。 – 2012-08-08 20:47:39