si tu as bien initialise (charge ?) ton object Recipe, le
“selected=selected” doit etre ajoute sur la bonne option.
si ton object n’est pas encore present dans la base de donnee
(equivelent a l’action new dans le scaffold) et que tu veux
positionner une valeur par defaut, tu peux faire, au niveau de
l’action, un: @recipe = Recipe.new(:category_id => )
Ah oui une autre source de bug (je dis cela pour ton <%= ’ selected’
if category.id == @recipe.category_id %>), c’est quelquefois on ne
sait pas si on manipule des chaines de caracteres ou des entiers
(exemple: ‘1’ != 1). Ce que je fais, c’est que je force les valeurs
avec un to_s ou to_i suivant les cas.
Le cas le plus courant est quand tu recuperes un id d’une requete et
que tu veux faire un test: if params[:category_id] == 1 => ne marchera
jamais a priori.
le tag select a ete cree pour etre associe a un model, fichiers que tu
trouves app/models, juste pour faciliter la tache des developpeurs.
Le tag select_tag est la forme brute lorsque par exemple tu veux
recuper une valeur qui n’est associee a aucun model ou bien quand tu
veux avoir un plus grand controle sur ton select.
Dans ton cas, le select tout seul doit marcher. Peux tu verifier que
tu declares bien ton instance recipes ? cela doit etre un @recipe dans
ton action. Verifie bien.
ah oui, ton nom n’est pas bon (d’un point de vue conventionnel):
recipes => recipe au singulier !
dans ton cas, je proscris tout bidouillage car il semble assez simple
!!!
Le bidouillage en Ruby On Rails est vraiment a utiliser en dernier
recours quand le truc n’a pas ete prevu dans le framework.
def collection_select_with_current(object, method, collection,
value_method,
text_method, current_value)
result = “\n”
for element in collection
if current_value == element.send(value_method)
result << “#{element.send(text_method)}\n”
else
result << “#{
element.send(text_method)}\n”
end
end
result << “\n”
return result
end
tu travailles sous quel environnement: test, development, production ?
Parce qu’avec les env de test et prod, les classes sont cachees
(options: config.cache_classes = true dans config/environments/test):
ce qui veut dire que meme si tu fais une modifs sur les controllers
par exemple, elles ne seront pas prises en compte sauf si tu
redemarres le serveur d’appli.
je n’ai pas eu besoin de mettre de condition
comme le disait plus tôt
si tu as bien initialise (charge ?) ton object Recipe, le
“selected=selected” doit etre ajoute sur la bonne option.
si ton object n’est pas encore present dans la base de donnee
(equivelent a l’action new dans le scaffold) et que tu veux
positionner une valeur par defaut, tu peux faire, au niveau de
l’action, un: @recipe = Recipe.new(:category_id => )
env est par defaut en principe
sinon c’est “echo $RAILS_ENV” (unix) pour savoir.
Mais c’est vrai quelque fois que le serveur RoR plante grave (c’est
rare mais cela m’est deja arrive) !
tu travailles sous quel environnement: test, development, production ?
Parce qu’avec les env de test et prod, les classes sont cachees
(options: config.cache_classes = true dans config/environments/test):
ce qui veut dire que meme si tu fais une modifs sur les controllers
par exemple, elles ne seront pas prises en compte sauf si tu
redemarres le serveur d’appli.