2011-01-14 22 views
61

Pregunta tonta, pero tengo una confusión persistente de qué es, exactamente, un "recurso" en Rails. El término se usa en todas partes, pero tengo la extraña sensación de que podría estar siendo utilizado de manera bastante flexible. Se hace referencia en el modelo, el controlador y, literalmente, en routes.rb.¿Qué es un "recurso" en Rails?

¿Es la ruta específica? Por ejemplo, map.resources mapea los 7 RESTful "recursos". Entonces, un ejemplo de un recurso sería la llamada a, por ejemplo, la acción index del controlador de una clase en particular?!?

¿Es una referencia a la página completa/objeto que se está recuperando? o tal vez, más estrictamente, una tabla de base de datos? o la fila que se retiró?

¿Es algo más?

De todos modos, espero que alguien me puede enderezar su rumbo ...

Respuesta

80

Cualquier objeto que desee que los usuarios puedan acceder a través de URI y realizar CRUD (o algún subconjunto de las mismas) operaciones puede considerarse un recurso. En el sentido de Rails, es generalmente una tabla de base de datos que se representa mediante un modelo y se actúa a través de un controlador.

Por ejemplo, es posible que tenga un recurso User (con una tabla users en su base de datos). Esto está representado por un modelo User, se asigna a users_controller con map.resources :users (que a su vez genera rutas como /users (una colección de recursos de usuario) y /users/1 (un recurso de usuario específica).

De actuar sobre esos recursos mediante el adecuado . método HTTP al realizar llamadas a esos recursos POST a la colección de recursos (/users) crea un nuevo registro; GET recupera una lista de los recursos (/users) o un usuario específico (/users/1) PUT actualiza un usuario específico (/users/1/), y DELETE. destruye a ese usuario. Las URL son las mismas, pero el resultado (y la acción del controlador) puede ser diferente según el verbo HTTP. La idea, sin embargo, es que /users/1 siempre significa "estoy interactuando con el usuario que tiene ID # 1", independientemente de la acción.

+0

Si tengo un recurso que no está utilizando un modelo de base de datos (está usando la API de un servicio independiente para la persistencia) ¿tiene sentido usar el "recurso" de los rieles? atajo o ¿es mejor que solo defina las rutas de forma manual? – Jonah

7

Aquí hay una good article discusión de cómo la mayoría de los desarrolladores creen que "recurso" es sinónimo de la tabla de base de datos, el argumento, supongo, es que el recurso a la cartografía está asignando el controlador a esa tabla de base de datos (o, con ActiveResource, a otra URL REST).

Básicamente, creo que un "recurso" es "datos persistentes". map.resources asigna las 7 acciones RESTful a un conjunto particular de datos persistentes.

Pero no he pensado demasiado en profundidad. ¡Buena pregunta!

3

Creo que probablemente significa que en el sentido general de la tela, es decir, Resource (Web):

el referente de cualquier Uniform Resource Identifier

no creo que tenga nada que ver con tablas de base de datos

3

abra su carpeta modelo, ¡eso es una pista de los recursos que tiene! ejemplo: usuarios, imágenes, comentarios ...

Cuestiones relacionadas