什么是Rails中的“资源”?

时间:2011-01-14 00:37:57

标签: ruby-on-rails

愚蠢的问题,但我对于什么,确切地说,"资源"有一些挥之不去的混淆。在Rails中。这个术语在任何地方都可以使用,但我觉得它可能会被松散地使用。它在模型,控制器和routes.rb中完全引用。

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

它是对正在检索的整个页面/对象的引用吗?或者,更狭隘的是,数据库表?或正在检索的行?

还有别的吗?

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

6 个答案:

答案 0 :(得分:85)

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

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

在调用这些资源时,您可以使用适当的HTTP方法对这些资源进行操作。 POST到资源集合(/users)创建一个新记录; GET检索资源列表(/users)或特定用户(/users/1)。 PUT更新特定用户(/users/1/),DELETE销毁该用户。 URL是相同的,但结果(和控制器操作)可能基于HTTP谓词不同。但是,这个想法是/users/1始终意味着“我正在与ID为#1的用户进行交互”,无论采取什么行动。

答案 1 :(得分:7)

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

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

但我没有深入考虑过这个问题。好问题!

答案 2 :(得分:3)

打开您的模型文件夹,这是您拥有的资源的暗示! 例如:用户,图片,评论......

答案 3 :(得分:2)

我认为它们可能意味着它在一般的网络意义上,即Resource (Web)

  

任何统一资源标识符的指示物

我认为它与数据库表没有任何关系。

答案 4 :(得分:1)

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

基本上是这样说的:资源路由允许您快速声明给定资源控制器的所有通用路由。足智多谋的路由无需为索引,显示,新建,编辑,创建,更新和销毁操作声明单独的路由,而是在一行代码中声明它们:

资源:照片

答案 5 :(得分:0)

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

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

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