# Parametri tramite get e post

**URL:** <https://www.ruby-forum.com/t/parametri-tramite-get-e-post/195815>\
**Category:** IT\
**Created:** [September 30, 2010, 5:08pm UTC](https://www.ruby-forum.com/t/parametri-tramite-get-e-post/195815 "2010-09-30T17:08:06Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![marcop](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b9bd4f/32.png) [@marcop](https://www.ruby-forum.com/u/marcop)\
**Post date:** [September 30, 2010, 5:08pm UTC](https://www.ruby-forum.com/t/parametri-tramite-get-e-post/195815/1 "2010-09-30T17:08:06Z")

</div>

Salve,  
mi scuso anzitempo per gli sciocchi dubbi, ma credo che all’inizio sia  
normale.  
Devo realizzare una cosa abbastanza semplice, ovvero scambio di messaggi  
privati tra utenti.

Per farlo ho deciso quindi di crearmi uno scaffold per “users” ed uno  
scaffold per “pms”. Ovviamente in user ho impostato “has\_many”, in pm ho  
impostato “belongs\_to”.  
Fin qui ok.

Il problema arriva ora: anzichÃ¨ inserire manualmente l’id del ricevente  
ho realizzato una piccola struttura che mi permette di vedere la lista  
degli utenti, entrare nel profilo di un utente, cliccare un tasto “Send  
PM” da cui vado nella pagina dei PM alla azione “New”.

Problema nÂ°1:  
i base lo scaffold per l’azione new vuole come azione una get e non  
accetta parametri in ingresso (almeno Ã¨ quello che leggo con un rake  
routes). Ho quindi eliminato dal resource nel file route l’azione “new”  
riscrivendola da solo per accettare un parametro tramite get.  
Questa implementazione Ã¨ giusta concettualmente? O c’Ã¨ un modo piÃ¹  
veloce ed elegante?

Problema nÂ°2:  
nel caso la validazione andasse male ovviamente si viene rimandati alla  
pagina new con l’elenco degli errori, ma l’id che mi ero portato dietro  
si perde.  
Come fare per recuperarlo o in alternativa inviarlo insieme al form  
(sempre tramite get)?

Problema nÂ°3:  
NB: la tabella ha un campo, receiver\_id, che io imposto tramite hidden  
input nel form e un altro, sender\_id che mi crea problemi perchÃ¨:  
nel caso in cui tutto vada a buon fine (quindi per il momento non avrei  
errori e quindi il problema 2 non bloccherebbe tutto) io riesco a  
recuperare il sender\_id, ma come lo uso?  
L’istruzione @pm = Pm.new(params[:pm]) come la latero per accettare  
anche un parametro @user.id che ho giÃ ?

Grazie mille!

---

<div class="post-metadata">

**Author:** ![marcop](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b9bd4f/32.png) [@marcop](https://www.ruby-forum.com/u/marcop)\
**Post date:** [September 30, 2010, 7:40pm UTC](https://www.ruby-forum.com/t/parametri-tramite-get-e-post/195815/2 "2010-09-30T19:40:40Z")

</div>

Credo che sia un problema molto comune quello di far fatica ad entrare  
nell’ottica REST: un neofita dovrebbe approfondire la cosa il prima  
possibile, perchÃ© Ã¨ basilare per evitare di scrivere codice che diventa  
subito spaghetti (sempre che non lo sia giÃ da subito 🙂

Secondo me Ã¨ meglio modificare le specifiche/idea mentale che ci si Ã¨  
fatti dell’applicazione pur di mantenere risorse e controller il piÃ¹  
RESTful possibili: semplicitÃ e chiarezza a quel livello sono  
impagabili, soprattutto se l’applicazione non Ã¨ triviale ed Ã¨ possibile  
che continui ad evolversi nel tempo. Molte migliorie  
all’interfaccia/usabilitÃ dell’applicazione possono poi essere fatte  
nelle viste e con progressive enhancement usando javascript, in modo da  
rendere piÃ¹ piacevole e semplice l’uso dell’applicazione.

> Il problema arriva ora: anzichÃ¨ inserire manualmente l’id del ricevente  
> ho realizzato una piccola struttura che mi permette di vedere la lista  
> degli utenti, entrare nel profilo di un utente, cliccare un tasto “Send  
> PM” da cui vado nella pagina dei PM alla azione “New”.

Un approccio diverso che avrebbe salvato la struttura REST avrebbe  
potuto essere mettere una select nella new del PM che listasse tutti i  
possibili utenti destinatari. Certo, se fossero decine sarebbe una  
soluzione pessima.  
Oppure si potrebbe nestare la risorsa pm dentro receiver, in modo da  
avere url del tipo

/receivers/1/pms/new

dove il receiver\_id sarÃ sempre disponibile come params[:receiver\_id],  
in questo caso 1, mentre il sender immagino che sia l’utente loggato,  
quindi sarÃ current\_user se stai usando un sistema di autenticazione tra  
i piÃ¹ famosi.

Ciao  
Andrea

–

> **[Site en construction](http://spaghetticode.it)**

---

<div class="post-metadata">

**Author:** ![marcop](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b9bd4f/32.png) [@marcop](https://www.ruby-forum.com/u/marcop)\
**Post date:** [October 1, 2010, 11:40am UTC](https://www.ruby-forum.com/t/parametri-tramite-get-e-post/195815/3 "2010-10-01T11:40:51Z")

</div>

Andrea L. wrote:

> Credo che sia un problema molto comune quello di far fatica ad entrare  
> nell’ottica REST: un neofita dovrebbe approfondire la cosa il prima  
> possibile, perchÃ© Ã¨ basilare per evitare di scrivere codice che diventa  
> subito spaghetti (sempre che non lo sia giÃ da subito 🙂
> 
> Secondo me Ã¨ meglio modificare le specifiche/idea mentale che ci si Ã¨  
> fatti dell’applicazione pur di mantenere risorse e controller il piÃ¹  
> RESTful possibili: semplicitÃ e chiarezza a quel livello sono  
> impagabili, soprattutto se l’applicazione non Ã¨ triviale ed Ã¨ possibile  
> che continui ad evolversi nel tempo. Molte migliorie  
> all’interfaccia/usabilitÃ dell’applicazione possono poi essere fatte  
> nelle viste e con progressive enhancement usando javascript, in modo da  
> rendere piÃ¹ piacevole e semplice l’uso dell’applicazione.
> 
> > Il problema arriva ora: anzichÃ¨ inserire manualmente l’id del ricevente  
> > ho realizzato una piccola struttura che mi permette di vedere la lista  
> > degli utenti, entrare nel profilo di un utente, cliccare un tasto “Send  
> > PM” da cui vado nella pagina dei PM alla azione “New”.
> 
> Un approccio diverso che avrebbe salvato la struttura REST avrebbe  
> potuto essere mettere una select nella new del PM che listasse tutti i  
> possibili utenti destinatari. Certo, se fossero decine sarebbe una  
> soluzione pessima.  
> Oppure si potrebbe nestare la risorsa pm dentro receiver, in modo da  
> avere url del tipo
> 
> /receivers/1/pms/new
> 
> dove il receiver\_id sarÃ sempre disponibile come params[:receiver\_id],  
> in questo caso 1, mentre il sender immagino che sia l’utente loggato,  
> quindi sarÃ current\_user se stai usando un sistema di autenticazione tra  
> i piÃ¹ famosi.
> 
> Ciao  
> Andrea
> 
> –  
> [http://spaghetticode.it](http://spaghetticode.it)

Ciao Andrea e grazie dei consigli :-).  
Ho ragionato un pochino sulla struttura REST e come fare per tenerla  
aggiornata: in effetti ho notato che se la struttura pm fosse “dentro”  
user avrei url per quella struttura composti come dici tu, ovvero:

/users/1/pms/new

il che permetterebbe di avere ordine nel codice e nella struttura. Vada  
per la modifica ;-), anche perchÃ¨ la lista utenti non Ã¨ fattibile  
essendo potenzialmente infiniti (Ã¨ un progetto di prova senza  
limitazioni di utenti).

In questo modo sia i problemi 1 e 2 vengono risolti, ma sai aiutarmi per  
il 3? CioÃ¨, dovendo creare un nuovo pm, di base l’istruzione che trovo Ã¨

@pm = Pm.new(params[:pm])

Come la altero per accettare anche un parametro current\_user.id che ho  
giÃ ? Sai rimandarmi a qualche link particolare?  
Ciao e grazie 🙂

---

<div class="post-metadata">

**Author:** ![marcop](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b9bd4f/32.png) [@marcop](https://www.ruby-forum.com/u/marcop)\
**Post date:** [October 2, 2010, 2:49pm UTC](https://www.ruby-forum.com/t/parametri-tramite-get-e-post/195815/4 "2010-10-02T14:49:58Z")

</div>

Marco P. wrote:

> Per quanti avranno lo stesso mio problema (eseguire una create con dati  
> provenienti dal form e dall’url) ho risolto in questo modo:  
> l’url finale sarÃ qualcosa tipo /users/3/pms/new, da cui ricavo il  
> “sender\_id”, e per salvare il tutto eseguo queste linee di codice:
> 
> params[:pm][:sender\_id] = params[:user\_id]  
> @pm = Pm.new(params[:pm])
> 
> Spero sia utile!

Attenzione, potrebbe essere pericoloso. Non ho capito se il “3” nel tuo  
url si riferisce al mittente o al destinatario, ma se si riferisse al  
primo un burlone ci metterebbe un secondo a taroccare il mittente dei  
suoi messaggi, gli basterebbe modificare quel numero.  
Risolvere Ã¨ molto semplice: se il mittente Ã¨ sempre l’utente loggato,  
cosa che credo piuttosto probabile, per creare i messaggi non dovresti  
settare l’id del mittente attraverso un parametro esterno come  
params[:user\_id] ma servirti di metodi tipo current\_user.pms.build o  
current\_user.pms.create.  
Se la cosa ti suonasse poco chiara o nuova ti consiglio di guardarti  
bene le guide sia sul routing che su activerecord che trovi su  
[http://guides.rubyonrails.org/](http://guides.rubyonrails.org/), e ci dovrebbe essere anche qualche  
railscast sull’argomento credo.

## Andrea

> **[Site en construction](http://spaghetticode.it)**

---

<div class="post-metadata">

**Author:** ![marcop](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b9bd4f/32.png) [@marcop](https://www.ruby-forum.com/u/marcop)\
**Post date:** [October 2, 2010, 4:17pm UTC](https://www.ruby-forum.com/t/parametri-tramite-get-e-post/195815/5 "2010-10-02T16:17:34Z")

</div>

Piccolo lapsus durante la scrittura: il mittente Ã¨ ovviamente l’utente  
loggato, il ricevente Ã¨ dato dal parametro dell’url. 😉

---

<div class="post-metadata">

**Author:** ![marcop](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b9bd4f/32.png) [@marcop](https://www.ruby-forum.com/u/marcop)\
**Post date:** [October 1, 2010, 1:44pm UTC](https://www.ruby-forum.com/t/parametri-tramite-get-e-post/195815/6 "2010-10-01T13:44:24Z")

</div>

Per quanti avranno lo stesso mio problema (eseguire una create con dati  
provenienti dal form e dall’url) ho risolto in questo modo:  
l’url finale sarÃ qualcosa tipo /users/3/pms/new, da cui ricavo il  
“sender\_id”, e per salvare il tutto eseguo queste linee di codice:

params[:pm][:sender\_id] = params[:user\_id]  
@pm = Pm.new(params[:pm])

Spero sia utile!

---

<div class="post-metadata">

**Author:** ![marcop](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b9bd4f/32.png) [@marcop](https://www.ruby-forum.com/u/marcop)\
**Post date:** [November 12, 2010, 7:49am UTC](https://www.ruby-forum.com/t/parametri-tramite-get-e-post/195815/7 "2010-11-12T07:49:51Z")

</div>

Come la altero per accettare anche un parametro current\_user.id che ho  
giÃ ? Sai rimandarmi a qualche link particolare?

[http://chncellphone.com/company-cases/China-cell-phone-wholesale](http://chncellphone.com/company-cases/China-cell-phone-wholesale)
