2009-04-22 26 views
54

Después de generar un andamio, Rails me da la posibilidad de POST a items.xml que creará un nuevo item. Un GET a items.xml simplemente los listará a todos. ¿Dónde se especificará Rails qué método en el controlador (create o index, respectivamente) se llamará, según el tipo de acción que estoy realizando?Rails POST, PUT, GET

Más específicamente, POST llama a methodA pero GET al mismo URL llama métodoB. ¿Dónde se especifica esto? ¿Dónde hace Rails la determinación de llamar al método index del controlador?

Respuesta

88

Creo que está especificado en REST. He aquí una lista para ti:

GET /items  #=> index 
GET /items/1  #=> show 
GET /items/new #=> new 
GET /items/1/edit #=> edit 
PUT /items/1  #=> update 
POST /items  #=> create 
DELETE /items/1  #=> destroy 

editar para agregar para obtener todas esas rutas, en config/routes.rb, sólo tiene que añadir map.resources :items

+38

sólo tiene que escribir "rutas rastrillo" para ver lo que pasa. –

+0

¿Existe alguna forma de especificar explícitamente que quiero usar POST solo como en ASP.NET MVC (atributo [HttPost])? – Alex

+0

Si realiza un GET en/items, irá a la acción Index. Si PUBLICA en/artículos, irás a Crear. –

10

El mejor lugar para aprender acerca de esto sería el Routing Guide.

+0

Hice lo mejor que pude para reemplazar los enlaces rotos. Verifique y asegúrese de que he vinculado a las páginas correctas. Gracias. –

5

Como Don Werve dijo, eche un vistazo a su archivo routes.rb. Allí probablemente tenga algo como esto:

map.resources :items 

Aquí es donde los raíles vinculan las solicitudes POST y GET a ciertas acciones. Para ver cómo funciona, mira los enlaces de las otras respuestas. Los documentos ayudan mucho.

Para todas las rutas y acciones a las que se vinculan, puede escribir rake routes en el símbolo del sistema cuando se encuentre en la raíz del directorio de sus raíles. Esto le mostrará todo (en términos de enrutamiento) que le ofrece un andamio.

5

Esto ayudará mucho, pero no es una respuesta directa a su pregunta. El siguiente comando mostrará una lista de las asignaciones que usa su aplicación para que no tenga que recordar todos los detalles o adivinar.

$ rake routes 

Para responder más directamente, esta es una convención que usa rails. Se establece esta asignación cuando se pone algo así como lo siguiente en su routes.rb

map.resources :items 
27

rieles define siete métodos de controlador de recursos REST por convención. Ellos son:

 
Action HTTP Method Purpose 
------------------------------------------------------------------------- 
index GET   Displays a collection of resources 
show  GET   Displays a single resource 
new  GET   Displays a form for creating a new resource 
create POST   Creates a new resource (new submits to this) 
edit  GET   Displays a form for editing an existing resource 
update PUT   Updates an existing resource (edit submits to this) 
destroy DELETE  Destroys a single resource 

Tenga en cuenta que debido a los navegadores web en general, sólo son compatibles con GET y POST, Rails utiliza un campo oculto para convertirlas en PUT y DELETE solicitudes según el caso.

Especificando map.resources :items en config/routes.rb le ofrece esos siete métodos "gratis". Puede enumerar todas las rutas dentro de su aplicación en cualquier momento ingresando rake routes en la consola.

+0

También puede verificar el código fuente para "reproducir" cualquiera de esos comportamientos: [recursos de Rails v3.2.9] (https://github.com/rails/rails/blob/v3.2.9/actionpack/lib/action_dispatch/ routing/mapper.rb # L984) en actionpack/lib/action_dispatch/routing/mapper.rb – brutuscat

3

map.resources es un método que automágicamente también le brinda las rutas REST y los ayudantes de ruta. Esta es una buena característica si ya sabes y entiendes cómo funciona el enrutamiento relajante de los rieles, pero también es un obstáculo para aprender raíles porque se oculta demasiado.

Railsguides tiene un bonito routes guide.

6

¿Desea saber cómo usar POST solamente? Haga esto, por ejemplo:

resources :items, :only => [:create] 

..etc. Esto es para Rails 3 por cierto, y generará un único recurso para crear POST. O si sólo se necesita un muy pequeño subconjunto del conjunto de reposo, de:

match 'items/:id' => "items#create', :via => :post 

, etc, etc

1

Para ser honesto, realmente no se puede ir mal con la documentación de enrutamiento en el sitio web de rieles. Esto ha ayudado a dar los siguientes pasos y ir más allá de la comodidad de los recursos (que para la mayoría de las aplicaciones está bien) y realmente definir las sólidas características de enrutamiento disponibles.

http://guides.rubyonrails.org/routing.html