# Non capisco questa magia

**URL:** <https://www.ruby-forum.com/t/non-capisco-questa-magia/214588>\
**Category:** IT\
**Created:** [December 6, 2011, 5:16pm UTC](https://www.ruby-forum.com/t/non-capisco-questa-magia/214588 "2011-12-06T17:16:06Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [December 6, 2011, 5:16pm UTC](https://www.ruby-forum.com/t/non-capisco-questa-magia/214588/1 "2011-12-06T17:16:06Z")

</div>

Come molti di voi saprete sto cercando di imparare ror, infatti sto  
facendo molte domande in questi giorni.  
Vorrei approfittare di nuovo della vostra cortesia per cercare di capire  
meglio il funzionamento di una cosa 🙂

Ho creato un semplice blog usando il comando automatico scaffold e stavo  
spulciando il codice per capire bene come funziona.

Non mi è chiaro però come alcune viste interagiscono con alcune azioni  
del controller.

Ad esempio nella pagina dove vengono mostrati tutti i post del blog c’è  
un link chiamato “show”. Cliccando su di esso viene mostrata una pagina  
con solo quel post. Il funzionamento è chiaro: il link manda tramite GET  
l’id del post che viene mostrato dalla funzione show del controller.

Questo è l’html del link:

[Show](https://www.ruby-forum.com/posts/1)

Da qua capisco subito che “posts” è il controller mentre “1” è l’id del  
commento.

la cosa che non capisco è: come fa ror a capire che quella richiesta  
deve andare nell’azione show del controller? Cioè io mi sarei aspettato  
un link tipo:

[Show](https://www.ruby-forum.com/posts/1/show)

Invece non c’è traccia dell’azione show!

La stessa cosa succede anche con la vistra new, che rimanda all’azione  
create del controller senza aver specificato da nessuna parte un  
riferimento ad essa !

Sono quelle piccole cose che mi frenano molto…quando imparo un nuovo  
linguaggio voglio sempre avere ben chiaro cosa sta succedendo 🙂 Se non  
capisco queste basi non posso andare avanti 🙂

Grazie ancora e scusate per i ripetuti post 🙂

---

<div class="post-metadata">

**Author:** ![noiz777](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/50afbb/32.png) [@noiz777](https://www.ruby-forum.com/u/noiz777)\
**Post date:** [December 6, 2011, 5:22pm UTC](https://www.ruby-forum.com/t/non-capisco-questa-magia/214588/2 "2011-12-06T17:22:38Z")

</div>

Ti consiglio di leggere qualcosa su REST

> **[Representational state transfer](https://en.wikipedia.org/wiki/Representational_state_transfer)**
>
> Representational state transfer (REST) is a software architectural style that was created to guide the design and development of the architecture for the World Wide Web. REST defines a set of constraints for how the architecture of an Internet-scale distributed hypermedia system, such as the Web, should behave. The REST architectural style emphasises the scalability of interactions between components, uniform interfaces, independent deployment of components, and the creation of a layered architec...

giusto per cominciare

Saluti  
Riccardo

---

<div class="post-metadata">

**Author:** ![noiz777](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/50afbb/32.png) [@noiz777](https://www.ruby-forum.com/u/noiz777)\
**Post date:** [December 6, 2011, 5:23pm UTC](https://www.ruby-forum.com/t/non-capisco-questa-magia/214588/3 "2011-12-06T17:23:16Z")

</div>

2011/12/6 Mauro M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> [Show](https://www.ruby-forum.com/posts/1)
> 
> Da qua capisco subito che “posts” il controller mentre “1” l’id del  
> commento.
> 
> la cosa che non capisco : come fa ror a capire che quella richiesta  
> deve andare nell’azione show del controller? Cio io mi sarei aspettato  
> un link tipo:

E’ la convenzione REST:

> **[2.2. CRUD, Verbs, and Actions - Rails Routing from the Outside In — Ruby on...](https://guides.rubyonrails.org/routing.html#crud-verbs-and-actions)**
>
> The Rails router matches incoming HTTP requests to specific controller actions in your Rails application based on the URL path. (It can also forward to a Rack application.) The router also generates path and URL helpers based on the resources...

Ad ogni verbo HTTP corrisponde una azione CRUD del modello sottostante.

> La stessa cosa succede anche con la vistra new, che rimanda all’azione  
> create del controller senza aver specificato da nessuna parte un  
> riferimento ad essa!

Idem 🙂

Ciao!

---

<div class="post-metadata">

**Author:** ![noiz777](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/50afbb/32.png) [@noiz777](https://www.ruby-forum.com/u/noiz777)\
**Post date:** [December 6, 2011, 5:28pm UTC](https://www.ruby-forum.com/t/non-capisco-questa-magia/214588/4 "2011-12-06T17:28:12Z")

</div>

Spiegazione naif:

In pratica i metodi HTTP vengo mappati in “verbi” che hanno un  
significato!

Se quindi voglio “prendere” i dati relativi al post con ID = 1 , mi  
basta fare GET /post/1 (lo “show” e’ implicito nel GET)

Spero ti sia d’aiuto!

---

<div class="post-metadata">

**Author:** ![noiz777](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/50afbb/32.png) [@noiz777](https://www.ruby-forum.com/u/noiz777)\
**Post date:** [December 6, 2011, 8:50pm UTC](https://www.ruby-forum.com/t/non-capisco-questa-magia/214588/5 "2011-12-06T20:50:19Z")

</div>

Grazie mille 🙂

ora ho capito!

ma questo accade solo se non specifico l’azione del controller? Voglio  
dire, posso specificare anche manualmente in che azione reindirizzare la  
chiamata?

---

<div class="post-metadata">

**Author:** ![noiz777](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/50afbb/32.png) [@noiz777](https://www.ruby-forum.com/u/noiz777)\
**Post date:** [December 6, 2011, 5:26pm UTC](https://www.ruby-forum.com/t/non-capisco-questa-magia/214588/6 "2011-12-06T17:26:21Z")

</div>

Da: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
A: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Cc:  
Data: Tue, 06 Dec 2011 17:16:06 +0100  
Oggetto: [ruby-it] Non capisco questa magia..  
Se guardi nel file routes.rb vedrai qualcosa del tipo:  
resources :posts

quello un metodo che, dietro le quinte, genera una serie di routes tra  
cui quella per /post/:id

More athttp://edgeguides.rubyonrails.org/routing.html

–

Andrea D.

> **[bolthar - Overview](https://github.com/bolthar)**
>
> bolthar has 18 repositories available. Follow their code on GitHub.

> **[using (IMHO)](https://usingimho.wordpress.com)**
>
> Andrea Dallera 's blog

> commento.  
> create del controller senza aver specificato da nessuna parte un  
> riferimento ad essa !
> 
> Sono quelle piccole cose che mi frenano molto..quando imparo un nuovo  
> linguaggio voglio sempre avere ben chiaro cosa sta succedendo 🙂 Se non  
> capisco queste basi non posso andare avanti 🙂
> 
> Grazie ancora e scusate per i ripetuti post 🙂

---

<div class="post-metadata">

**Author:** ![noiz777](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/50afbb/32.png) [@noiz777](https://www.ruby-forum.com/u/noiz777)\
**Post date:** [December 7, 2011, 12:52pm UTC](https://www.ruby-forum.com/t/non-capisco-questa-magia/214588/7 "2011-12-07T12:52:47Z")

</div>

Il 06 dicembre 2011 20:50, Mauro M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha  
scritto:

> ma questo accade solo se non specifico l’azione del controller? Voglio  
> dire, posso specificare anche manualmente in che azione reindirizzare la  
> chiamata?

S ma, come regola generale, non farlo. Tieniti REST pi che puoi, ne  
guadagni in salute e le tue app restano semplici.

Considera che, se @post un oggetto, puoi fare

= link\_to @post.title, @post

In generale, usa le named route restful, fai link, redirect etc a  
oggetti o a, che so, posts\_url, new\_post\_url, etc.  
Se proprio qualche volta devi, puoi aggiungere altre action non rest  
per cose molto specifiche, ma anche in quel caso usa la sintassi che  
trovi gi consigliata nei commenti dentro config/routes.rb:

# Sample resource route with options:

# resources :products do

# member do

# get ‘short’

# post ‘toggle’

# end

# 

# collection do

# get ‘sold’

# end

# end

pietro

---

<div class="post-metadata">

**Author:** ![noiz777](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/50afbb/32.png) [@noiz777](https://www.ruby-forum.com/u/noiz777)\
**Post date:** [December 12, 2011, 9:54am UTC](https://www.ruby-forum.com/t/non-capisco-questa-magia/214588/8 "2011-12-12T09:54:40Z")

</div>

Puoi, definendo le routes nel file routes.rb (o route.rb? non ricordo)

:method =\> ‘post’ (se ricordo bene)

la cosa diventa utile se devi mappare azioni specifiche anche in formati  
macchina com XML. IO per esempio l’ho usate per aggiornare un web server  
con una call XML RPC da una macchina industriale. In questi caso ho  
deciso di mappare l’azione in POST (creavo un nuovo record per ogni XML  
RPC dalla macchina).

Insomma e’ configurabile  
.
