在Rails中什么是“资源”?


74

愚蠢的问题,但是我对Rails中的“资源”到底是什么一直挥之不去。这个术语在任何地方都可以使用,但是我感到很有趣,它可能使用得相当宽松。它在模型,控制器以及(实际上是)中引用routes.rb

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

它是对要检索的整个页面/对象的引用吗?或者更狭义地讲是数据库表?还是行被撤退?

还有吗

无论如何,希望有人能使我挺直...

Answers:


93

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

例如,您可能有一个User资源(users在数据库中有一个表)。这是通过一个表示User模型,被映射到users_controllermap.resources :users(其然后产生等路线/users(用户资源的集合)和/users/1(一个特定的用户的资源)。

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


如果我的资源没有使用数据库模型(使用持久性的单独服务的API),使用rails“ resource”快捷方式还是有意义的吗?还是最好手动定义路由?
约拿(Jonah)'18年

当然,您当然可以使用resources来为数据库中没有的资源定义路由!如果您不需要默认情况下路由到的所有控制器操作,只需使用only:except:告诉它您实际上想要的是哪个。例如,resources :things, only: [:index, :show]...
泰勒·里克

我知道这已经很老了,但是我希望有人能回答,仅在声明7条REST路由时使用resources :usersinconfig/routes.rb吗?
Irfandy Jip

1
@IrfandyJip我不是专家,但是我知道添加resources :users确实为您声明了7条REST路由,您可以使用rails routes命令自己进行验证。你能澄清你的问题,虽然,如果你想为其他途径解释:user..
JR鲍勃·多布斯

8

这是一篇很好的文章,讨论了大多数开发人员如何认为“ Resource”与数据库表是同义的,我想这是因为映射到资源会将控制器映射到该数据库表(或者使用ActiveResource映射到另一个REST URL) )。

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

但是我并没有考虑太多。好问题!


2

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

任何统一资源标识符的对象

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


2

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


嗯。我认为这不是一个正确的答案,尤其是对于新的RoR用户而言。我之所以来到这里,是因为我对《入门指南》中提供的教程感到困惑,而且我只能看到concerns/application_record.rb继续app/models/(我正在执行步骤5)。而且我不知道为什么会有帮助。
伊凡迪·吉普(Irfandy Jip),

Irfandry,在Rails中,资源是应用程序具有的实体,例如:在MVC(Rails所基于的)中,“用户”,“图片”,“评论”,“喜欢” ...您有单独的文件夹用于模型,视图和控制器...直接从您提供的链接中获取:“在Blog应用程序中,您现在将创建一个新资源。资源是用于收集类似对象(例如文章)的术语,人类或动物。您可以为资源创建,读取,更新和销毁项目,这些操作称为CRUD操作。”
Brian Joseph Spinos

是的,我已经读过,但是当时我还是很困惑。尤其是“资源是用于收集相似对象的术语”一词,听起来确实很奇怪,也许是因为英语不是我的母语。但是我已经找到了一个更简单的答案。感谢您的帮助:)
Irfandy Jip

2

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

我将资源定义为映射到相关请求的路由。因此,而不是宣布采取的行动不同的途径,你想干什么,你可以使用一个足智多谋的route.In Rails的简单声明它们,一个足智多谋的路由提供之间的映射HTTP requests,并URLscontroller actions

因此,说您resources :users在中定义config/routes.rb
现在,您可以对应用程序中的控制器使用许多辅助方法,例如edit_user_pathreturn users/edit


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.