Self-relationship


#1

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


#2

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


#3

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

thanks :slight_smile:

Il 09/04/07, Nicholas W. 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


Ml mailing list
removed_email_address@domain.invalid
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


#4

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 ? :stuck_out_tongue:
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:
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001038

HTH,
ngw


Nicholas W.
removed_email_address@domain.invalid
http://www.tochunky.org


#5

ok perfetto… grazie mille :slight_smile:

ciao ciao

Il 09/04/07, Nicholas W. 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


Ml mailing list
removed_email_address@domain.invalid
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