Désolé Nicolas, j’ai foutu la merde dans ton topic, j’ai fais un
reply et je croyais que en changeant le sujet du mail, ça créerait un
nouveau topic.
la solution qui me semble la plus adaptée a ton problème est
d’utiliser une variable initialisée dans un before filter.
Ok, ça me donne un début
d’idée
Ensuite une ternaire peut t’aider pour éviter le if/else d’une ligne.
Ternaire ? désolé je vois pas ce que c’est … 
Ton code logique reste dans les controlleurs et tu appelle simplement
ta variable dans tes vues.
Ok, mais comment faire pour éviter de tester systématiquement les
variables dans les vues, sachant que parfois elles risquent d’être à
nil ? C’est ce genre d’astuce qu’il me manque. Dans l’exemple que j’ai
pris, c’est un formulaire que je retrouve sur toutes les pages.
Ou bien c’est une mauvaise idée de ma part de laisser traîner des
variables comme celle-là (params[:truc]) dans les vues. Mais alors il
faut penser à les créer systématiquement, et là c’est moins DRY.
Christophe Guégan a écrit :
Ternaire ? désolé je vois pas ce que c’est … 
J’ai posté un mail qui répond à cette question et te donne ma vision de
la réponse à ton mail précédent
Ok, mais comment faire pour éviter de tester systématiquement les
variables dans les vues, sachant que parfois elles risquent d’être à
nil ? C’est ce genre d’astuce qu’il me manque. Dans l’exemple que j’ai
pris, c’est un formulaire que je retrouve sur toutes les pages.
Ou bien c’est une mauvaise idée de ma part de laisser traîner des
variables comme celle-là (params[:truc]) dans les vues.
Oui c’est une mauvaise idée. Instancie un objet du modèle correspondant
dès que possible. A mon sens le code que tu as posté avec un :value =>
params[:tru][:sous_truc] est pas propre du tout.
Mais alors il
faut penser à les créer systématiquement, et là c’est moins DRY.
C’est pour ça que tu as les before filter: pour toutes les opérations
que tu dois faire systématiquement dans plusieurs méthode du
controlleur, tu créé une fonction que tu appelle dans les before_filter.
C’est DRY. Ce qui n’est pas DRY c’est de répéter le même test à tout
bout de champs. Dans ce cas il faut un helper (si tu vois pas ce qu’est
un helper, il faut vraiment que tu lises un livre sur rails).
ex, dans ton controller:
before filter :initialize_mon_truc
def initialize_mon_truc
@truc=Truc.new(params[:truc])
end
Ce bout de code va systèmatiquement initialiser @truc pour toutes les
méthode de ton controller. Si tu veux limiter à certaine méthode,
utilise les options :only et :except.
Un conseil : lit un bouquin sur rails, tout ça c’est décrit dedans plus
en détail.