愚蠢的问题,但我有一些挥之不去的困惑,究竟是什么,一个“资源”在Rails中。这个词到处都在使用,但我有一种有趣的感觉,它可能被使用得相当松散。它在模型、控制器和routes.rb
中都有引用。
是具体的路线吗?例如,map.resources
Map了7个RESTful“资源”。所以一个资源的例子是调用,比如说,一个特定类的控制器的index
动作?!?
它是对整个页面/对象的引用吗?或者更狭义地说,是一个数据库表?还是那一排被收回了
是不是有别的原因?
不管怎样,希望有人能让我明白...
7条答案
按热度按时间yi0zb3m41#
您希望用户能够通过URI访问并对其执行CRUD(或其子集)操作的任何对象都可以被视为资源。在Rails的意义上,它 * 通常 * 是一个数据库表,由模型表示,并通过控制器进行操作。
例如,您可能有一个
User
资源(在数据库中有一个users
表)。这由User
模型表示,通过map.resources :users
Map到users_controller
(然后生成/users
(用户资源的集合)和/users/1
(特定用户资源)等路由)。在调用这些资源时,您可以通过使用适当的HTTP方法对这些资源进行操作。
POST
到资源集合(/users
)创建新记录;GET
检索资源列表(/users
)或特定用户(/users/1
)。PUT
更新特定用户(/users/1/
),DELETE
销毁该用户。URL是相同的,但结果(和控制器操作)可能会因HTTP动词而异。/users/1
始终表示“我正在与ID为#1的用户交互”,而不管操作如何。9vw9lbht2#
这里有一个good article讨论了大多数开发人员如何认为“Resource”与数据库表同义,我猜,Map到资源就是将控制器Map到该数据库表(或者,使用ActiveResource,Map到另一个REST URL)。
基本上,我认为“资源”是“持久化数据”。
map.resources
将7个RESTful * 操作 * Map到一组特定的持久化数据。但我还没有深入思考过。问得好!
qq24tv8q3#
我想他们可能是指一般的网络意义上,即Resource (Web):
任何统一资源标识符的引用
我不认为这与数据库表有关。
kqhtkvqz4#
打开你的模型文件夹,这是一个提示,你有什么资源!例如:用户,图片,评论.
gmol16395#
这里很多人说资源指的是你拥有的数据库表。这可能有时是真的,但不一定总是真的。我可以给你给予很多例子,在你的数据库中没有一个特定资源的对应表。因此,将它与table联系起来是相当错误的。
我将资源定义为Map到相关请求的路由。因此,您可以简单地使用资源路由来声明它们,而不是为您想要执行的操作声明单独的路由。在Rails中,资源路由提供了
HTTP requests
和URLs
到controller actions
之间的Map。假设你在
config/routes.rb
中定义了resources :users
。你现在可以在你的应用程序中使用一些辅助程序来控制器,比如
edit_user_path
,它返回users/edit
。eagi6jfj6#
这里有一个很好的链接:https://api.rubyonrails.org/v5.2.1/classes/ActionDispatch/Routing/Mapper/Resources.html
基本上就是说:资源路由允许您快速声明给定资源丰富的控制器的所有公共路由。不是为你的索引、显示、新建、编辑、创建、更新和销毁操作声明单独的路由,而是在一行代码中声明它们:
资源:照片
ou6hu8tu7#
在Roy Fielding介绍REST的论文中,他在第5章的 *5.2.1.1资源和资源标识符 * 中明确定义了“资源”。
在Rails的上下文中,入门指南给出了以下定义:
到目前为止,我们已经介绍了CRUD的“R”(读)。我们将最终涵盖“C”(创建),“U”(更新)和“D”(删除)。正如您可能已经猜到的,我们将通过添加新的路由、控制器操作和视图来实现这一点。每当我们有这样一个路由、控制器操作和视图的组合,它们一起工作来对一个实体执行CRUD操作时,我们将该实体称为 * 资源 *。例如,在我们的应用程序中,我们会说一篇文章是一种资源。