Forum: Rails France 'selected'

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ba00a402965da738f601b6367cf3224f?d=identicon&s=25 Bolo (Guest)
on 2006-04-25 17:28
(Received via mailing list)
Yop,

comment fait ton pour ajouter une option selected dans select box

pour l'instant  j'ai ca

<%= select('recipes', 'category.id', Category.find_all.collect  {|c| [
c.nom,
c.id ] }) %>
j'ai essayé d'ajouté ca

<%= ' selected' if category.id == @recipe.category_id %>>

mais bon ca ne marche pas :)

merci
415a80eb88afdd18a5b776992ef9e12b?d=identicon&s=25 pmt (Guest)
on 2006-04-25 17:37
Bonjour,

> <%= select('recipes', 'category.id', Category.find_all.collect  {|c| [
> c.nom,
> c.id ] }) %>

Ca ne fonctionne pas comme tu as fait ?
C'est pour tant bien proche de l'exemple de l'api
(http://api.rubyonrails.com/classes/ActionView/Help...)

Voici un exemple (perso) du select_tag :

<%= select_tag('articles[]', options_for_select(@articles_map,
@articles_id),
        :size => 20, :multiple => true) %>

avec dans @articles_map, un tableau de paires [texte, id],
et dans @articles_id, un tableau contenant les id selected.

J'espère t'avoir éclairé.

++
Pierre Marchet
91eb330fb36d1e03c856574dfb77d2bc?d=identicon&s=25 Thibaut Barrère (Guest)
on 2006-04-25 17:40
(Received via mailing list)
Salut Bolo

essaie d'ajouter :selected => value en dernier argument

cf
http://api.rubyonrails.com/classes/ActionView/Help...

Thibaut
Ee01e594333a9e631173d0d8e4350214?d=identicon&s=25 didier lafforgue (Guest)
on 2006-04-25 17:46
(Received via mailing list)
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 => <id category>)

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.

J'espere que cela t'aidera

 Didier

2006/4/25, Bolo <malavoi@gmail.com>:
Ba00a402965da738f601b6367cf3224f?d=identicon&s=25 Bolo (Guest)
on 2006-04-25 17:52
(Received via mailing list)
<%= select('recipes', 'category.id', Category.find_all.collect  {|c| [
c.nom,
c.id ] }) %>

ceci fonctionne je vois bien liste déroulante, mais j'aimerais ajouté un
selected. C


<%= select_tag('articles[]',
options_for_select(@articles_map,@articles_id),:size
=> 20, :multiple => true) %>

avec dans @articles_map, un tableau de paires [texte, id],
et dans @articles_id, un tableau contenant les id selected.

Alors quelle est la différence entre select_tag et select, mais si tu
veux
mêtre un condition comme ceci
J'aimerai que la valeur soit séléctionée si category_id ==
recipe.category_id  dans le tuto cookbook leur code ressemble a ca

<select name="recipe[category_id]">
<% @categories.each do |category| %>
<option value="<%= category.id %>"
<%= ' selected' if category.id == @recipe.category_id %>>
<%= category.name %>
</option>
<% end %>
</select>

essaie d'ajouter :selected => value en dernier argument

J'ai essayé ca
<%= select('recipes', 'category.id', Category.find_all.collect  {|c| [
c.nom,
c.id ] },{ :selected => value }) %>

j'ai ce message

undefined local variable or method `value' for
#<#<Class:0x24a96d0>:0x24a96a8>
91eb330fb36d1e03c856574dfb77d2bc?d=identicon&s=25 Thibaut Barrère (Guest)
on 2006-04-25 17:55
(Received via mailing list)
> J'ai essayé ca
> <%= select('recipes', 'category.id', Category.find_all.collect  {|c| [
c.nom, c.id ] },{ :selected => value }) %>

> j'ai ce message

> undefined local variable or method `value' for #<#<Class:0x24a96d0>:0x24a96a8>


il faut remplacer value par la valeur que tu veux mettre en fait...
Ee01e594333a9e631173d0d8e4350214?d=identicon&s=25 didier lafforgue (Guest)
on 2006-04-25 17:58
(Received via mailing list)
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 !


2006/4/25, Bolo <malavoi@gmail.com>:
Ee01e594333a9e631173d0d8e4350214?d=identicon&s=25 didier lafforgue (Guest)
on 2006-04-25 18:02
(Received via mailing list)
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.


2006/4/25, didier lafforgue <didier.lafforgue@gmail.com>:
F16def8015a7562a285c65a14be48540?d=identicon&s=25 Mathieu Chappuis (Guest)
on 2006-04-25 18:05
(Received via mailing list)
Contrib trouvée sur le wiki


def collection_select_with_current(object, method, collection,
value_method,
text_method, current_value)
     result = "<select name='#{object}[#{method}]'>\n"
     for element in collection
       if current_value == element.send(value_method)
         result << "<option value='#{element.send(value_method)}'
selected='selected'>#{element.send(text_method)}</option>\n"
        else
         result << "<option value='#{element.send(value_method)}'>#{
element.send(text_method)}</option>\n"
      end
     end
     result << "</select>\n"
     return result
   end
Ba00a402965da738f601b6367cf3224f?d=identicon&s=25 Bolo (Guest)
on 2006-04-25 20:06
(Received via mailing list)
si tu as bien initialise (charge ?) ton object Recipe, le
"selected=selected" doit etre ajoute sur la bonne option.

Je suis pas sur de bien comprendre le sens "inistialise" mais mon champs
categorie_id ( qui est une clef étrangère) est bien chargé. J'ai
regénérer
le model avec script/generate scaffold recipe

> undefined local variable or method `value' for #<#<Class:0x24a96d0>:0x24a96a8>

il faut remplacer value par la valeur que tu veux mettre en fait...

on peut mettre un condition un peut comme ca ? { :selected => if
category.id== @
recipe.category_id}

Peux tu verifier que tu declares bien ton instance recipes ? cela doit
etre
un @recipe dans ton action. Verifie bien.

dans mon action def edit ?

recipes_controller.rb
  def edit
    @recipe = Recipe.find(params[:id])
    @categories = Category.find_all
  end

category.rb
class Category < ActiveRecord::Base
  has_many :recipes
end

recipes.rb
class Recipe < ActiveRecord::Base
  belongs_to :category
end
Ba00a402965da738f601b6367cf3224f?d=identicon&s=25 Bolo (Guest)
on 2006-04-25 20:19
(Received via mailing list)
voila ca marche. Je pense que loco doit avoir un chack car j'ai du
redémarrer l'application pour que ca marche :(

2006/4/25, Bolo <malavoi@gmail.com>:
Ee01e594333a9e631173d0d8e4350214?d=identicon&s=25 didier lafforgue (Guest)
on 2006-04-25 20:22
(Received via mailing list)
* Premiere chose:
ton model doit s'appeler recipe.rb (au singulier) et non recipes.rb =>
convention RoR

* Deuxiemement:

ton action est correct, le nom est bien @recipe (au singulier)
def edit
    @recipe = Recipe.find(params[:id])
    @categories = Category.find_all
  end


maintenant dans ta vue (edit.rhtml): tu dois avoir le champ category:

<%= select('recipe', 'category_id', Category.find_all.collect  {|c| [
c.nom, c.id ] }) %>

remarque que j'ai change par rapport a ton instruction initiale:
recipes en recipe et category.id en category_id.

Je pense que cela devrait marcher maintenant.
courage

 Did


2006/4/25, Bolo <malavoi@gmail.com>:
Bae3272fbe1313479c4c9c375d75c462?d=identicon&s=25 jmb (Guest)
on 2006-04-25 23:09
(Received via mailing list)
Fd608c2b5ba7896b449e26fcf18b70b4?d=identicon&s=25 Zambra (Guest)
on 2006-04-26 18:13
(Received via mailing list)
Bolo a écrit :
> voila ca marche. Je pense que loco doit avoir un chack car j'ai du
> redémarrer l'application pour que ca marche :(

Tu peux redonner la syntaxe exacte de ton select avec la condition ?
Ba00a402965da738f601b6367cf3224f?d=identicon&s=25 Bolo (Guest)
on 2006-04-26 20:24
(Received via mailing list)
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 => <id category>)

quand l'objet est bien initailisé , le selected se place tout seul. Je
sais
pas pkoi mais j'ai du redémarer loco pour que l'objet recipe s'intialise
correctement
Ee01e594333a9e631173d0d8e4350214?d=identicon&s=25 didier lafforgue (Guest)
on 2006-04-26 20:55
(Received via mailing list)
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.


2006/4/26, Bolo <malavoi@gmail.com>:
Ba00a402965da738f601b6367cf3224f?d=identicon&s=25 Bolo (Guest)
on 2006-04-26 21:48
(Received via mailing list)
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.


et comment je peux savoir sur quel environement je travaille ? Si on ne
touche a rien( ceque je fais toujours :) Ce n'est pas défaut
developement ?
Ee01e594333a9e631173d0d8e4350214?d=identicon&s=25 didier lafforgue (Guest)
on 2006-04-26 21:57
(Received via mailing list)
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) !

2006/4/26, Bolo <malavoi@gmail.com>:
Ba00a402965da738f601b6367cf3224f?d=identicon&s=25 Bolo (Guest)
on 2006-04-26 23:37
(Received via mailing list)
tu travailles avec loco ?


2006/4/26, didier lafforgue <didier.lafforgue@gmail.com>:
Ee01e594333a9e631173d0d8e4350214?d=identicon&s=25 didier lafforgue (Guest)
on 2006-04-26 23:40
(Received via mailing list)
non !

2006/4/26, Bolo <malavoi@gmail.com>:
Ba00a402965da738f601b6367cf3224f?d=identicon&s=25 Bolo (Guest)
on 2006-04-27 01:31
(Received via mailing list)
okidoki faut pas se facher :)

2006/4/26, didier lafforgue <didier.lafforgue@gmail.com>:
Ee01e594333a9e631173d0d8e4350214?d=identicon&s=25 didier lafforgue (Guest)
on 2006-04-27 05:34
(Received via mailing list)
t'inquiete c'etait un non gentil !
bon elle marche ton appli ?

2006/4/26, Bolo <malavoi@gmail.com>:
Ba00a402965da738f601b6367cf3224f?d=identicon&s=25 Bolo (Guest)
on 2006-04-27 12:58
(Received via mailing list)
> t'inquiete c'etait un non gentil !
> bon elle marche ton appli ?



Oui elle marche du feu de dieu !!
This topic is locked and can not be replied to.