Non capisco questa magia

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 :slight_smile:

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

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

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 :slight_smile: Se non
capisco queste basi non posso andare avanti :slight_smile:

Grazie ancora e scusate per i ripetuti post :slight_smile:

Ti consiglio di leggere qualcosa su REST

giusto per cominciare

Saluti
Riccardo

2011/12/6 Mauro M. [email protected]

Show

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:

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 :slight_smile:

Ciao!

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!

Grazie mille :slight_smile:

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?

Da: [email protected]
A: [email protected]
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.

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 :slight_smile: Se non
capisco queste basi non posso andare avanti :slight_smile:

Grazie ancora e scusate per i ripetuti post :slight_smile:

Il 06 dicembre 2011 20:50, Mauro M. [email protected] 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

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
.