【问题标题】:What is a "resource" in Rails?Rails 中的“资源”是什么?
【发布时间】:2011-06-08 21:17:07
【问题描述】:

愚蠢的问题,但我对 Rails 中的“资源”到底是什么有一些挥之不去的困惑。这个词到处都在使用,但我有一种有趣的感觉,它可能被相当松散地使用了。它在模型、控制器中以及在routes.rb 中被引用。

是具体路线吗?例如,map.resources 映射 7 个 RESTful “资源”。因此,one 资源的一个示例是调用特定类控制器的 index 操作?!?

它是对正在检索的整个页面/对象的引用吗?或者,更严格地说,是一个数据库表?还是正在检索的行?

还有别的吗?

无论如何,希望有人可以让我直截了当......

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    这是一个很好的链接:https://api.rubyonrails.org/v5.2.1/classes/ActionDispatch/Routing/Mapper/Resources.html

    这基本上是说:资源路由允许您快速声明给定资源控制器的所有公共路由。资源丰富的路由不是为您的索引、显示、新建、编辑、创建、更新和销毁操作声明单独的路由,而是在一行代码中声明它们:

    资源:照片

    【讨论】:

      【解决方案2】:

      这里很多人说资源是指您拥有的数据库表。有时可能是正确的,但不一定总是正确的。我可以给你很多例子,你的数据库中没有特定资源的对应表。因此,将其与表格相关联是相当错误的。

      我会将资源定义为映射到相关请求的路由。因此,无需为您想要执行的操作声明单独的路由,您只需使用资源路由声明它们即可。在 Rails 中,资源路由提供了HTTP requestsURLscontroller actions 之间的映射。

      假设您在config/routes.rb 中定义了resources :users
      您现在可以在应用程序中对控制器使用许多帮助器,例如返回users/editedit_user_path

      【讨论】:

        【解决方案3】:

        打开你的模型文件夹,这是你有什么资源的提示! 例如:用户、图片、cmets...

        【讨论】:

        • 嗯.. 我不认为这是一个有效的答案,尤其是来自新的 RoR 用户。我来到这里是因为我对Getting Started 中提供的教程感到困惑,而我只在app/models/ 上看到concerns/application_record.rb(我在第5 步)。而且我不明白为什么会有帮助。
        • Irfandry,在 rails 中,资源是您的应用程序拥有的实体,例如:“users”、“pictures”、“cmets”、“likes”......基于)您有用于模型、视图和控制器的单独文件夹...这直接取自您提供的链接:“在博客应用程序中,您现在将创建一个新资源。资源是用于类似对象的集合,例如文章、人或动物。您可以为资源创建、读取、更新和销毁项目,这些操作称为 CRUD 操作。"
        • 是的,我已经读过了,但是我在读的时候仍然很困惑。尤其是“A resource is the term used for a collection of similiar objects”这句话,在我看来真的很奇怪,也许是因为英语不是我的第一语言。但是我已经找到了一个更简单的answer。感谢您的帮助:)
        【解决方案4】:

        您希望用户能够通过 URI 访问并对其执行CRUD(或其某些子集)操作的任何对象都可以被视为资源。在 Rails 的意义上,它通常是一个数据库表,由模型表示,并通过控制器进行操作。

        例如,您可能有一个User 资源(在您的数据库中有一个users 表)。这由User 模型表示,并通过map.resources :users 映射到users_controller(然后生成类似/users(用户资源集合)和/users/1(特定用户资源)的路由。

        在调用这些资源时,您可以使用适当的 HTTP 方法对这些资源进行操作。 POST给资源集合(/users)创建一条新记录; GET 检索资源列表 (/users) 或特定用户 (/users/1)。 PUT 更新特定用户 (/users/1/),DELETE 销毁该用户。 URL 是相同的,但结果(和控制器操作)可能会根据 HTTP 动词而有所不同。不过,这个想法是 /users/1 始终意味着“我正在与 ID #1 的用户进行交互”,而不管操作如何。

        【讨论】:

        • 如果我有一个不使用数据库模型的资源(它使用单独服务的 API 来实现持久性),使用 rails“资源”快捷方式是否仍然有意义或者我更好只是手动定义路线?
        • 当然,您当然可以使用resources 为不在数据库中的资源定义路由!如果您不需要它默认路由到的所有控制器操作,只需使用only:except: 告诉它您真正需要哪些操作。例如,resources :things, only: [:index, :show]...
        • 我知道这是旧的,但我希望有人能回答,在config/routes.rb 中使用resources :users 是否仅用于声明7 REST 路由?
        • @IrfandyJip 我不是专家,但我知道添加 resources :users 确实为您声明了 7 条 REST 路由,您可以使用 rails routes 命令自行验证。你能否澄清你的问题,并解释你是否想要:user..的其他路线。
        【解决方案5】:

        我认为他们可能是一般网络意义上的意思,即Resource (Web)

        任何统一资源标识符的指代

        我认为这与数据库表无关。

        【讨论】:

          【解决方案6】:

          这里有一个good article 讨论大多数开发人员如何认为“资源”是数据库表的同义词,我猜这个论点是映射到资源是将控制器映射到该数据库表(或者,使用 ActiveResource,到另一个 REST url)。

          基本上,我认为“资源”是“持久数据”。 map.resources 将 7 个 RESTful 操作 映射到一组特定的持久化数据。

          但我并没有深入思考它。好问题!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-17
            • 1970-01-01
            • 1970-01-01
            • 2022-12-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-22
            相关资源
            最近更新 更多