1

Je suis désolé d'avoir posté une autre question à propos de ce même morceau de code mais je suis si novice aux rails que c'est douloureux. Ma question est, je voudrais obtenir un troisième bouton radio pour être sélectionné quand la valeur par défaut dans le DB est présente. En d'autres termes, j'ai trois boutons "vrai", "faux" et "soit". Si rien n'est encore sélectionné ou si l'utilisateur a sélectionné le bouton "soit", j'aimerais que cette sélection soit affichée. Actuellement, si l'utilisateur choisit "true" ou "false", alors cette sélection est reflétée correctement et comme prévu. C'est juste que la troisième option sélectionnée n'est pas reflétée lorsque le formulaire est sauvegardé ou remonté. Voici mon code:avoir des problèmes avec: checked radio_button - rails

<div class="new-partner-form"> 
<%= form_for [:admin, matching_profile.partner, matching_profile], :html => {:id => "edit_profile", :multipart => true} do |f| %> 
    <div class="rounded-block semi-wide clear"> 
    <h4>Military Service</h4> 
    <%= f.radio_button :served_in_us_army, false %> 
    <%= label :served_in_us_army, 'NO', {:style => 'display:inline'} %> 
    <%= f.radio_button :served_in_us_army, true %> 
    <%= label :served_in_us_army, 'YES', {:style => 'display:inline'} %> 
    <%= f.radio_button :served_in_us_army, " ", { :checked => (:served_in_us_army.nil? or :served_in_us_army.blank? ? true : false) } %> 
    <%= label :served_in_us_army, 'Either', {:style => 'display:inline'} %> 
    <%= f.error_message_on :served_in_us_army %> 
    </div> 

EDIT: Je dois noter que aussi essayé l'option: « cochée » sans les accolades. Toujours pas de chance.

Je ne sais pas si cela est la meilleure solution, mais voici comment je l'ai résolu la question (i besoin la valeur du champ et non le nom de la colonne):

<div class="rounded-block semi-wide clear"> 
    <h4>Military Service</h4> 
    <%= f.radio_button :served_in_us_army, false %> 
    <%= label :served_in_us_army, 'NO', {:style => 'display:inline'} %> 
    <%= f.radio_button :served_in_us_army, true %> 
    <%= label :served_in_us_army, 'YES', {:style => 'display:inline'} %> 
    <%= f.radio_button :served_in_us_army, " ", :checked => matching_profile.served_in_us_army.nil? %> 
    <%= label :served_in_us_army, "Either", {:style => 'display:inline'} %> 
    <%= f.error_message_on :served_in_us_army %> 
</div> 

Répondre

1

Je vous recommande pas cela en la vue. C'est la logique métier. Essayez de le faire dans le contrôleur ou même mieux dans le modèle.

Dans ce cas, vous pourriez vouloir utiliser le contrôleur pour les nouvelles actions (en particulier) d'édition et peut-être créer une variable d'instance pour cette information. Vous pouvez sélectionner les valeurs de la base de données, ajouter une option manuelle, avoir un if-then, tout ce qu'il faut pour définir correctement l'objet.

Le meilleur de tous (toujours) est d'essayer de résoudre ce problème au niveau du modèle. Vous pourriez avoir des méthodes de modèle qui regardent la valeur existante pour le service militaire, puis renvoyer des informations à ce sujet - même une valeur true/false car les booléens sont excellents. Assurez-vous de bien préparer le (s) attribut (s) (avant de le faire) .save

+0

Je crains d'être encore un peu brumeux ici. Dites que j'ajoute des méthodes au modèle qui retourne la valeur de: served_in_us_army (probablement je peux faire quelque chose comme 'attr_accessor: served_in_us_army'). N'aurais-je pas encore besoin d'une vérification dans la vue pour voir quelle est la valeur et déterminer si le bouton est coché en fonction de la valeur? – Ramy

Questions connexes