【问题标题】:Nesting resources for User Comment on Event用户评论事件的嵌套资源
【发布时间】:2014-01-17 17:43:49
【问题描述】:

我正在努力改进 Rails 和嵌套资源。一个用户通过 UserEvent 连接表有许多事件(反之亦然)。我还希望用户对事件发表评论。到目前为止,Event 嵌套在我的资源中的 User 下。你会如何嵌套评论?是否会嵌套在 Event 下,因此在 User 下有两个连续嵌套的资源?这将如何运作?

【问题讨论】:

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


    【解决方案1】:

    我认为这是我建议的嵌套方法:

    resources :users
    resources :events do
      resources :comments
    end
    

    在多对多关系中,将一个嵌套在另一个之下通常没有意义,因为两者都没有更强的包含关系。

    在您的场景中,一个用户不属于一个事件并且一个事件不属于一个用户,因此让您的路线代表它并不能完全模拟这种关系。您的 URL 看起来像 /events/1/users/2。这意味着用户 2 仅存在于事件 1 中。

    我认为您的UserEvent 是顶级资源是有道理的。另一方面,Comments 确实有一些所有权,这对嵌套是有意义的。在上下文方面,Comment 很可能与Event 相关联。 User 只是负责它的人。在用户下嵌套 cmets 将为您提供简单的 URL 来显示用户的所有 cmets,但我打赌您更有可能显示 Event 的所有 cmets。考虑到这一点,我建议在Events 下嵌套Comments

    如果您要删除用户和nullify user_id 模型中的user_id,这也是有意义的。您仍然可以拥有评论的 URL。如果你删除了Event,那么这些 cmets 可能就不再有用了,所以你可以简单地销毁它们。

    【讨论】:

    • 只是一个小附录,您可以修改 :users 路由以包括:get 'comments', on: :member 为您提供获取用户拥有的所有 cmets 的 URL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多