[ruby-it] metodi nel modello
Pietro Giorgianni
giorgian a gmail.com
Lun 9 Feb 2009 09:37:18 CET
2009/2/9 Alessandro Ale <aleee.it a gmail.com>:
> Ciao,
> ho questa domanda: ho la classico modello user a cui è associato un
> modello "profilo".
>
> user ha un campo obbligatorio che si chiama 'login', e il profilo in
> generale non è obbligatorio, e comunque ha un campo che si chiama nome e
> un altro cognome
>
> ora vorrei che nelle viste quando si visualizza un utente venga
> visualizzato il nome e cognome se sono presenti (e quindi se c'e' il
> profilo), in alternativa vorrei che visualizzasse il login.
>
> Per far questo ho pensato di mettere un metodo del tipo
> 'nome_da_visualizzare' nel modello user, ma non so come fare
> (probabilmente vi sembrerà una domanda molto banale, ma non ci riesco lo
> stesso...)
>
manca un dato: se profile è presente, nome e cognome sono sicuramente
presenti oppure no?
se sì,
class User < ActiveRecord::Base
has_one :profile
def name_to_show
profile ? "#{profile.first_name} #{profile.last_name}" : login
end
end
altrimenti:
class User < ActiveRecord::Base
has_one :profile
def name_to_show
(profile && profile.first_name && profile.last_name) ?
"#{profile.first_name} #{profile.last_name}" : login
end
end
solo che così è illegibile, quindi meglio:
def name_to_show
if profile && profile.first_name && profile.last_name
"#{profile.first_name} #{profile.last_name}"
else
login
end
end
ah, questa cosa di fare "#{a} #{b}" invece di a + " " + b oppure [a,
b].join ' ' è un vizio mio, l'ho preso anni fa, dopo la prima volta
che ho provato a concatenare 10000000 stringhe in un ciclo for, con
risultati devastanti. in effetti è molto leggibile finché sono #{a} e
#{b}, un po' meno quando si complica un po'.
meglio sarebbe, forse, definire in Profile:
class Profile < ActiveRecord::Base
def full_name
(first_name && last_name) ? "#{first_name} #{last_name}" : nil
end
end
e poi in user:
def name_to_show
(profile && profile.full_name) || login
end
così credo sia più chiaro, e in più la roba di profile la maneggia
profile, e la roba di user la maneggia user.
pietro
More information about the Ml
mailing list