# New personalizzate, come fare?

**URL:** <https://www.ruby-forum.com/t/new-personalizzate-come-fare/134091>\
**Category:** IT\
**Created:** [April 7, 2008, 8:38pm UTC](https://www.ruby-forum.com/t/new-personalizzate-come-fare/134091 "2008-04-07T20:38:03Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![matte\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/4da419/32.png) [@matte\_S](https://www.ruby-forum.com/u/matte_S)\
**Post date:** [April 7, 2008, 8:38pm UTC](https://www.ruby-forum.com/t/new-personalizzate-come-fare/134091/1 "2008-04-07T20:38:03Z")

</div>

Salve a tutti,  
penso di perdere tempo su un problema molto banale: ho una vista che  
crea un form per un oggetto A e un oggetto B a lui collegato.  
Nel controller dell’oggetto A ho scritto le seguenti righe di codice:

@obja = A.new(params[:a])  
@objb = B.new(params[:b])

Ora io vorrei pero’ che un in objb venga impostato automaticamente il  
campo a\_id con la chiave di A appena creata. Come posso fare? Io avevo  
pensato di modificare B successivamente con

@objb.a\_id = @obja.id

ovviamente non funziona.  
Mi chiedo 2 cose:

1. esiste un modo per passare alla new non tutti i parametri da  
acquisire nella view, ma solo alcuni e prederminarne altri?
2. perche’ l’assegnamento cosi scritto non funziona?

Saluti e grazie.

---

<div class="post-metadata">

**Author:** ![matte\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/4da419/32.png) [@matte\_S](https://www.ruby-forum.com/u/matte_S)\
**Post date:** [April 7, 2008, 11:04pm UTC](https://www.ruby-forum.com/t/new-personalizzate-come-fare/134091/2 "2008-04-07T23:04:20Z")

</div>

Se non ho capito male, c’è una relazione uno a uno tra B ed A, in cui B  
appartiene ad A.  
Ti faccio una domanda stupida, dopo l’assegnazione, salvi @objb?  
Il modo corretto per ottenere quello che ti interessa consinste nel  
salvare prima @a, instanziare @b e poi assegnare:

@b.a = @a  
@b.save

Quando salvi @b la relazione verrà persistita.

Tornando alla prima domanda, params è un hash che contiene tutti i  
parametri inviati tramite la request. Pertanto puoi accedere agli  
elementi che ti interessa passare al costruttore del tuo oggetto.  
Es: @a = A.new(:name =\> params[:a][:name])  
In questo caso passi al costruttore di A, solo l’attributo name inviato  
dal client, ignorando tutto il resto.

Non ho capito la seconda parte della domanda, quella in cui parli di  
“predeterminarne altri”.

Spero d’essere stato chiaro.

Luca

---

<div class="post-metadata">

**Author:** ![matte\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/4da419/32.png) [@matte\_S](https://www.ruby-forum.com/u/matte_S)\
**Post date:** [April 9, 2008, 4:27pm UTC](https://www.ruby-forum.com/t/new-personalizzate-come-fare/134091/3 "2008-04-09T16:27:47Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

Luca G. wrote:

> 

Ok

> Tornando alla prima domanda, params è un hash che contiene tutti i  
> parametri inviati tramite la request. Pertanto puoi accedere agli  
> elementi che ti interessa passare al costruttore del tuo oggetto.  
> Es: @a = A.new(:name =\> params[:a][:name])  
> In questo caso passi al costruttore di A, solo l’attributo name inviato  
> dal client, ignorando tutto il resto.
> 
> Non ho capito la seconda parte della domanda, quella in cui parli di  
> “predeterminarne altri”.

Nel controller scrivo  
@a = A.new(params[:a])

in tal modo passo tutti i campi dell’oggetto a al form, ma se io sapessi  
a priori che il campo pippo di a fosse uguale a x, come potrei fare in  
modo che la new tenga conto di cio’?  
Ovvero vorrei passare tutti i valori di A tranne che il campo pippo.

Per fare cio’ devo per forza intervenire dopo sull’oggetto ovvero:  
@a = A.new(params[:a])  
[compilazione campi nella view, submit]  
@a.save  
@a.pippo = “x”

Si puo’ fare piu’ velocmente?

> Spero d’essere stato chiaro.
> 
> Luca

* * *

Matteo Buferli  
WEB: [http://www.buferli.com](http://www.buferli.com)  
PGP FINGERPRINT: B7C9 BE0A F77F 4747 56A2 87EC F6E5 8A01 65BB 58C1  
-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1.4.6 (GNU/Linux)  
Comment: Using GnuPG with Mozilla - [http://enigmail.mozdev.org](http://enigmail.mozdev.org)

iD8DBQFH/NJI9uWKAWW7WMERAmefAJ91GN8qOiLbp/xjwcm8u6mb+Ks/PwCeLNvD  
VOVnL202922ihBODlRKF9oI=  
=QqJn  
-----END PGP SIGNATURE-----
