【问题标题】:Ruby on Rails 3 Documentation: "Can I" \ "Is it advisable" use (at least) a nested resource?Ruby on Rails 3 文档:“我可以”\“是否可取”(至少)使用嵌套资源?
【发布时间】:2011-02-17 08:22:08
【问题描述】:

我读过Rails Routing from the Outside In,特别是2.7 Nested Resources \ 2.7.1 限制嵌套部分,它说

资源永远不应该嵌套更多 深度超过 1 级。

这是什么意思?即“我可以”\“是否可取”这样使用一级嵌套资源

namespace "users" do
  resources :publishers do
    resources :magazines
  end
end

或者我应该使用类似的东西

namespace "users" do
  resources :publishers
  resources :magazines
end

你怎么看?

如果是推荐的方式,路由路径怎么写(比如new_users_publisher_magazine...)?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 resources nested


    【解决方案1】:

    您也可以对资源使用浅层路由。这是两全其美的做法。即使您在代码中将资源嵌套多层,它也会自动将资源嵌套一层。

    namespace :users do
      shallow do
        resources :publishers do
          resources :maagazines
        end
      end
    end
    

    【讨论】:

      【解决方案2】:

      这取决于你需要什么。

      namespace "users" do
        resources :publishers do
          resources :magazines
        end
      end
      

      会给你不同的路线比

      namespace "users" do
        resources :publishers
        resources :magazines
      end
      

      一方面,第二个给你类似的路线

      /users/1/publishers/ 和 /users/1/magazines

      而第一个给了

      /users/1/publishers/1/magazines

      建议不要在你的路线中尽可能多地嵌套,除非你真的真的需要,就像你的生活依赖它一样:P。不过这正是我的想法,因为 3 层的巢穴可能会让你遭受的痛苦超过它对你的帮助。

      【讨论】:

      • 您输入的第一个代码就是您需要的。命名空间“用户”做资源:出版商做资源:杂志结束结束
      【解决方案3】:

      我认为这是品味问题。这只是一个指南而不是规则。如果您对第一种方法感觉更好,那就去吧。我使用双重嵌套资源,我的同事中没有人不抱怨它。但是当然,如​​果我会看到 4 级或更多级别的嵌套资源,则很难编写路径,所以对我来说限制是两个(有时是 3 个)。您应该选择自己的限制。

      【讨论】:

        【解决方案4】:

        它说的不止一个级别,所以这是正确的,并且建议您始终通过出版商访问杂志:

        namespace "users" do
          resources :publishers do
            resources :magazines
          end
        end
        

        【讨论】:

        • 正如我所说,您必须始终从出版商那里写到杂志的路线,因此:/users/publisher/5/magazines
        【解决方案5】:

        这取决于模型:如果杂志属于出版商,出版商属于用户,那么两级嵌套是有意义的(尽管它并不是真正必要的)。如果发布者有很多用户,那么我建议不要使用这种方法,因为它会使事情变得不必要地复杂。

        要查看资源的命名路由助手,您可以使用“rake routes”。它很好地概述了已定义的路线。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-25
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 2015-10-18
          • 1970-01-01
          • 1970-01-01
          • 2011-05-20
          相关资源
          最近更新 更多