[ruby-it] self-relationship
Nicholas Wieland
n.wieland a tochunky.org
Lun 9 Apr 2007 04:18:26 CEST
Il giorno 08/apr/07, alle ore 22:41, tarini ha scritto:
> 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.
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 Wieland
n.wieland a tochunky.org
http://www.tochunky.org
Maggiori informazioni sulla lista
Ml