# Una domanda su accepts\_nested\_attributes

**URL:** <https://www.ruby-forum.com/t/una-domanda-su-accepts-nested-attributes/213772>\
**Category:** IT\
**Created:** [November 11, 2011, 9:52am UTC](https://www.ruby-forum.com/t/una-domanda-su-accepts-nested-attributes/213772 "2011-11-11T09:52:04Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [November 11, 2011, 9:52am UTC](https://www.ruby-forum.com/t/una-domanda-su-accepts-nested-attributes/213772/1 "2011-11-11T09:52:04Z")

</div>

Spesso vedo negli esempi:

accepts\_nested\_attributes\_for :tags, :allow\_destroy =\> :true,  
:reject\_if =\> proc { |attrs| attrs.all? { |k, v| v.blank? } }

dove la :reject\_if evita che il modello venga salvato se tutti i suoi  
attributi sono vuoti.  
Ma se nel modello uso i validates obbligando a riempire almeno un  
campo non ottengo lo stesso risultato?  
Se si posso quindi evitare di usare la :reject\_if.

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [November 11, 2011, 9:25pm UTC](https://www.ruby-forum.com/t/una-domanda-su-accepts-nested-attributes/213772/2 "2011-11-11T21:25:47Z")

</div>

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

On 11/11/2011 09:51, Mauro wrote:

> accepts\_nested\_attributes\_for :tags, :allow\_destroy =\> :true, :reject\_if =\>  
> proc { |attrs| attrs.all? { |k, v| v.blank? } }
> 
> dove la :reject\_if evita che il modello venga salvato se tutti i suoi  
> attributi sono vuoti. Ma se nel modello uso i validates obbligando a  
> riempire almeno un campo non ottengo lo stesso risultato? Se si posso  
> quindi evitare di usare la :reject\_if.

_Credo di si_ perch come ci si aspetta le validazioni dei modelli sono  
onorate anche delegando la creazione dell’albero di oggetti ad  
accepts\_nested\_attributes\_for

Se togli il reject\_if e lasci solo la validazione sui campi di Tag  
_dovrebbe  
ad occhio_ succedere questo:

- 
  - parti da un form in cui ci sono i campi degli has\_many (che il  
motivo per  
cui usi accepts\_nested\_attributes\_for)

- 
  - SE invii i campi di un tuo oggetto Tag tutti vuoti

- 
  - ALLORA la validazione ti impedir di salvare tutto l’albero degli  
oggetti  
che stai creando perch ci sono errori e accepts\_nested\_attributes\_for fa  
tutto con un’unica transazione

reject\_if serve a togliere roba evidentemente inutile, forse accoppia  
troppo  
il modello con la vista ma utile se usato in questo senso e toglie  
logica  
per la creazione di modelli dai controller rimettendola nei modelli (non  
sempre quello che si vuole)

Comunque accepts\_nested\_attributes\_for mi sembra una funzionalit che  
almeno  
per un periodo iniziale stata famigerata perch copre alcuni casi d’uso  
e  
non altri che ci si aspetta e rischia di esporre dei problemi di  
sicurezza se  
non usata con cognizione di causa (questo ultimo paragrafo solo  
un’impressione che non saprei circostanziare bene)

Buona esplorazione 😉

Antonio B.  
-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1.4.11 (GNU/Linux)

iQEcBAEBAgAGBQJOvYSxAAoJELgLplTPZUF9HpAH/14eLCbUsjq19cSgrEG/OPB6  
JmpBkvtvB4VEM+roVfsC36PBgeh8mjrVzqFo/3D0rPRB9UBfdg9cpIQa4/OVK4UE  
Dw01KLnOX5ffZGhqmXfk4t9PjJ8rAWN1+xUbSeVUwu9jA3n2LO9QIoIT+dpi+HID  
MXPNAhJk+k3SF9b928TBMedQQ9Hmpqee7QM0meKKQ/pdiE3J0Xv/JXGflOGbElyh  
Es1v1F7hFoqOW+San6WYgFvK06k0AQwK/8ooglJBwweKK1SzxR0Dcygf/y+zamqd  
woBpzqvDDqPjznGH0GppzUDl8C3cUSPzD7F9d53MIZiHMKaK79vriX0XEv3uqZQ=  
=ZZMN  
-----END PGP SIGNATURE-----
