gpt4 book ai didi

ruby-on-rails - Rails 为组织/用户 : domain. com/user 和 domain.com/organization 使用相同的顶级 URL 路由的工作方式相同

转载 作者:行者123 更新时间:2023-12-04 11:35:54 25 4
gpt4 key购买 nike

我正在尝试使顶级路由以这种方式从我的 Rails API 工作到 Ember.js 客户端(类似于 GitHub 的工作方式,例如):

www.example.com/username会给你一个用户页面。这会击中 api.example.com/users/:username端点或其他端点。

www.example.com/organization_name会给你一个组织的页面。这会击中 api.example.com/organizations/:organization_name端点或其他端点。

当获取随机 URL 时,客户端显然不知道它正在处理什么类型的模型。它只会把它当作 www.example.com/random_string ,其中 random_string要么是 usernameorganization_name .

我不太确定如何处理这种情况。目前还不清楚这里的客户端或服务器的责任在哪里。我可以想象这里可能存在某种多态性,但无法将点联系起来。

编辑

通过为 /:slug 设置一个包罗万象的路线,这看起来在 Rails 方面表面上是可能的。然后使用 slug 首先查询 User ,然后查询 Organization .

那么,更大的问题是,通过使用现有 Controller 操作进行渲染还是让 HTTP 使用重定向来处理这些请求是否有意义。威尔ember-data处理好 HTTP 重定向?在另一种情况下,它是否能够在此端点上适本地切换类型?

最佳答案

It looks like this is ostensibly possible on the Rails side by having a catch-all route for /:slug and then using the slug to first query for a User, and then query for an Organization.



这是唯一可行的方法。您需要在 config/routes.rb 文件的最后添加这个包罗万象的路由。我建议您将此路由与 Controller 中的代理方法相关联,该方法将确定 UserOrganization记录对应于 slug .

知道您必须考虑应用程序操作时 User和一个 Organization有相同的 slug (有些会优先考虑其中之一,有些会为访问者提供 2 个选择);以及当没有记录时采取的行动对应于 slug (有些将显示 404,有些将路由到列表页面)。这些选择将帮助您确定更好的代理方法设计。

这里主要是设计这个代理方法。

1- HTTP 重定向

您的代理方法将响应 redirect_to到/users/:slug 或/organizations/:slug 取决于从 slug 中找到的内容.
  • 优点:编写和维护简单快捷。
  • 缺点:由于 HTTP 重定向导致应用响应缓慢,并且在第二次请求期间需要重新访问数据库。

  • 2- Ajax 响应

    类似于 HTTP 重定向,但在 AJAX 中完成。您的代理方法将显示一个包含 JavaScript 代码的页面,这些代码获取/users/:slug 或/organizations/:slug 的内容并通过 AJAX 显示它。

    此外,可以通过 JavaScript 使用 history.pushState 更改 URL。
  • 优点:比上面快一点
  • 缺点:但是比较难写,需要JavaScript代码加js View ,而且第二次请求时还需要重新访问数据库

  • 3- 服务器端代理

    您的代理方法将执行与端点方法相同的代码。意思是如果 slug发现对应于 User记录,代理方法与 UserController#show 的作用相同. (同样适用于 Organization )

    这意味着代理方法必须调用所有 UserController#show 之前/之后的过滤器。会,并呈现相同的 View 。

    如果您选择此解决方案进行 DRY,请务必谨慎。或者您最终可能会在维护您的应用程序时遇到困难。

    没有一种方法可以做到这一点,这完全取决于您的应用程序架构。例如,如果您的 show方法只是获取记录并呈现 View ,如果没有 Controller 助手方法,那么它既简单又安全。另一方面,如果您有过滤器和 Controller 助手方法,则它会变得更加棘手。在这种情况下,您可能需要依赖 Controller 问题。
  • 优势:最快的解决方案
  • 缺点:编写起来可能非常复杂,并且根据 future 代码库的演变,您可能最终处于锁定情况,您将不得不放弃此设计。
  • 关于ruby-on-rails - Rails 为组织/用户 : domain. com/user 和 domain.com/organization 使用相同的顶级 URL 路由的工作方式相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837394/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com