# Self-relationship

**URL:** <https://www.ruby-forum.com/t/self-relationship/91424>\
**Category:** IT\
**Created:** [April 8, 2007, 10:42pm UTC](https://www.ruby-forum.com/t/self-relationship/91424 "2007-04-08T22:42:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![tarini](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/5f8ce5/32.png) [@tarini](https://www.ruby-forum.com/u/tarini)\
**Post date:** [April 8, 2007, 10:42pm UTC](https://www.ruby-forum.com/t/self-relationship/91424/1 "2007-04-08T22:42:24Z")

</div>

salve ragazzi, sto facendo un po’ di test con rails per cercare di  
entrare  
davvero nella sua logica.

Sto realizzando una sorta di gestione utenti. Ogni utente oltre ai campi  
“standard” (name, surname, email, user, pass…) ha un utente “friend”.  
Significa che ciascun utente potrà scegliere tra gli altri utenti un  
amico.

Ovviamente questo non è un campo obbligatorio (altrimenti il primo come  
farebbe a registrarsi??!!??).

Il primo problema che mi è giunto è quello di mostrare una select contenente  
i nomi degli utenti già inseriti, dando la possibilità al nuovo utente di  
scegliersi l’amico in maniera facile.

Il problema qualè? Praticamente nel momento della creazione dell’utente la  
select deve mostrare TUTTI gli utenti inseriti nel DB, mentre nella  
modifica  
deve mostrare TUTTI gli utenti TRANNE quello corrente che sta  
modificando il  
profilo.

Ho utilizzato questa soluzione, anche se un po’ di comodo e troppo poco  
elegante  
\<%=select(“user”, “user\_id”, User.find(:all, :conditions =\> “users.id \<\>  
#{@  
user.id|0}”).collect {|p| [p.username, p.id] }, {:include\_blank =\>  
true})  
%\>

Praticamente se @user esiste aggiungo un “\<\> id” alla query, altrimenti  
aggiungo “\<\> 0” che, non esistendo nessun utente con id = 0, mi ritorna  
tutti gli utenti.

Mi era venuta in mente anche l’idea di inserire un if nella vista  
discriminando su @user e utilizzando due select() diverse, una con la  
clausula \<\> user.id e l’altra senza clausole.

Cosa mi consigliereste??

grazie

–  
everything has got to end sometime we were satellites drifting off into  
space  
vega 4 - burn and fade away

---

<div class="post-metadata">

**Author:** ![tarini](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/5f8ce5/32.png) [@tarini](https://www.ruby-forum.com/u/tarini)\
**Post date:** [April 9, 2007, 4:19am UTC](https://www.ruby-forum.com/t/self-relationship/91424/2 "2007-04-09T04:19:47Z")

</div>

Il giorno 08/apr/07, alle ore 22:41, tarini ha scritto:

> Il problema qualè? Praticamente nel momento della creazione  
> \<%=select(“user”, “user\_id”, User.find(:all, :conditions =\>  
> “users.id \<\> #{@  
> user.id|0}”).collect {|p| [p.username, p.id] }, {:include\_blank  
> =\> true})  
> %\>
> 
> Praticamente se @user esiste aggiungo un “\<\> id” alla query,  
> altrimenti  
> aggiungo “\<\> 0” che, non esistendo nessun utente con id = 0, mi  
> ritorna  
> tutti gli utenti.

Mai, mai, mai, mai, mai fare cose così dentro una vista. Quella roba  
va nel controller.

> Mi era venuta in mente anche l’idea di inserire un if nella vista  
> discriminando su @user e utilizzando due select() diverse, una con la  
> clausula \<\> user.id e l’altra senza clausole.
> 
> Cosa mi consigliereste??

Ma sono 2 azioni differenti o no ? Se si popoli le tue variabili nel  
controller in base a quello che ti serve, altrimentiti serve un modo  
per differenziare, e direi che new\_record? fa al caso tuo.

ngw

–  
Nicholas W.  
removed\_email\_address@domain.invalid  
[http://www.tochunky.org](http://www.tochunky.org)

---

<div class="post-metadata">

**Author:** ![tarini](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/5f8ce5/32.png) [@tarini](https://www.ruby-forum.com/u/tarini)\
**Post date:** [April 9, 2007, 9:52am UTC](https://www.ruby-forum.com/t/self-relationship/91424/3 "2007-04-09T09:52:12Z")

</div>

quindi creo una nuova variabile @possibleFriends nel controller e la  
loopo  
nella vista creando le options?

thanks 🙂

Il 09/04/07, Nicholas W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> > “friend”.  
> > utente di  
> > Ho utilizzato questa soluzione, anche se un po’ di comodo e troppo  
> > aggiungo “\<\> 0” che, non esistendo nessun utente con id = 0, mi  
> > Cosa mi consigliereste??  
> > [http://www.tochunky.org](http://www.tochunky.org)
> 
> * * *
> 
> Ml mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
everything has got to end sometime we were satellites drifting off into  
space  
vega 4 - burn and fade away

---

<div class="post-metadata">

**Author:** ![tarini](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/5f8ce5/32.png) [@tarini](https://www.ruby-forum.com/u/tarini)\
**Post date:** [April 9, 2007, 11:41pm UTC](https://www.ruby-forum.com/t/self-relationship/91424/4 "2007-04-09T23:41:56Z")

</div>

Il giorno 09/apr/07, alle ore 09:51, tarini ha scritto:

> quindi creo una nuova variabile @possibleFriends nel controller e  
> la loopo  
> nella vista creando le options?

Eh ? 😛  
No, ti ho detto che se l’azione e’ la stessa (e che mi caschi un  
orecchio ora se capisco perche’ non hai usato due azioni  
differenti :p) puoi usare new\_record? per capire se il tuo utente è  
nel db o meno, se è nel DB metti la condition, altrimenti find(:all).  
That’s all, folks.  
new\_record? lo trovi qui:

> **[ActiveRecord::Base](https://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001038)**
>
> Active Record Active Record objects don't specify their attributes directly, but rather infer them from the table definition with which they're linked.

HTH,  
ngw

–  
Nicholas W.  
removed\_email\_address@domain.invalid  
[http://www.tochunky.org](http://www.tochunky.org)

---

<div class="post-metadata">

**Author:** ![tarini](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/5f8ce5/32.png) [@tarini](https://www.ruby-forum.com/u/tarini)\
**Post date:** [April 10, 2007, 10:06am UTC](https://www.ruby-forum.com/t/self-relationship/91424/5 "2007-04-10T10:06:47Z")

</div>

ok perfetto… grazie mille 🙂

ciao ciao

Il 09/04/07, Nicholas W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> differenti :p) puoi usare new\_record? per capire se il tuo utente è  
> nel db o meno, se è nel DB metti la condition, altrimenti find(:all).  
> [http://www.tochunky.org](http://www.tochunky.org)
> 
> * * *
> 
> Ml mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
everything has got to end sometime we were satellites drifting off into  
space  
vega 4 - burn and fade away
