【问题标题】:Nesting Rails Resources in Multiple Locations在多个位置嵌套 Rails 资源
【发布时间】:2012-08-08 14:26:50
【问题描述】:

在构建 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

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

这允许我在客户端提供一个相当不错的 UI,用户可以在其中查看和编辑组拥有的所有权限,或用户拥有的所有权限。有更好的方法吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2


    【解决方案1】:

    没有。您需要的上下文越多,不幸的是,它需要的复杂性就越高。如果您将 API 添加到您的应用程序,它可能会变得更加复杂,因为您通常需要基本资源,而不是嵌套资源。我发现的唯一解决方案是尝试通过不创建最常用的路由来取得平衡,然后通过让这些请求符合要求来消除其余的路由。令人困惑,是的!

    【讨论】:

    • 啊,好吧。我想我只是希望有一些最佳实践来处理具有多个父级的嵌套资源。我想我只需要尽量保持我的代码尽可能干净......
    • 您可以以任何您想要的方式嵌套——没有任何限制或惩罚(除了创建它们的时间)。因此,如果它合乎逻辑并且有助于程序员/用户清晰,那就去吧。我的回答可能更多是因为我在使用 API 处理嵌套资源时看到的复杂性,其中额外代码要求的惩罚很高。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多