2016-12-14 3 views
0

J'ai la même forme. Quand l'objet a une valeur pour le genre, je veux changer le champ de genre en un champ caché, ainsi l'utilisateur n'a pas besoin de le voir. Quelle est la meilleure façon de procéder?Rails: Masquer le champ lorsque la valeur est affichée

<%= form_for(object ,:html => {:class => "form-horizontal"}) do |f| %> 
     <div class="form-group row"> 
      <%= f.label(:first_name, :class => "control-label col-xs-4 input-lg") %> 

      <div class="form-inline col-xs-8"> 
       <div class=""> 
        <%= f.text_field(:first_name,{class: "form-control input-lg"}) %> 
       </div> 
      </div> 
     </div> 

     <div class="form-group row"> 
      <%= f.label(:last_name, :class => "control-label col-xs-4 input-lg") %> 

      <div class="form-inline col-xs-8"> 
       <div class=""> 
        <%= f.text_field(:last_name,{class: "form-control input-lg"}) %> 
       </div> 
      </div> 
     </div> 
    <div class="form-group row"> 
      <%= f.label(:gender, :class => "control-label col-xs-4 input-lg") %> 
      <div class="col-xs-8"> 
      <%= f.select(:gender, Dropdown.gender,{:prompt =>"Please Choose"},{class: "form-control input-lg"}) %> 
      </div> 
     </div> 
      <div class="col-xs-8 col-xs-offset-4"> 
       <%= f.submit object.submit_button_name, {class: 'btn btn-lg'} %> 
      </div> 

    <% end %> 
+0

Qu'est-ce que votre contrôleur indique devrait être fait après l'enregistrement? Je parie que c'est là que le problème est. Vous devriez avoir un redirect_to après la sauvegarde. –

+0

Ce problème n'a rien à voir avec le contrôleur, juste la vue, mais merci – user2012677

Répondre

1

Vous pouvez simplement utiliser une instruction if pour rendre les différents types de terrain selon que le sexe est défini ou non:

<% if object.gender %> 
    <%= f.hidden_field(:gender) 
    <% else %> 
    <div class="form-group row"> 
    <%= f.label(:gender, :class => "control-label col-xs-4 input-lg") %> 
    <div class="col-xs-8"> 
     <%= f.select(:gender, Dropdown.gender,{:prompt =>"Please Choose"},{class: "form-control input-lg"}) %> 
    </div> 
    </div> 
    <% end %> 
+0

Assez sûr que cela afficherait le code HTML puisqu'il ne fait pas partie de l'instruction if. Comment pourrais-je résoudre ce problème? – user2012677

0

Au lieu de hidding, il est préférable de ne pas le rendre. Essayez-le comme ceci:

<% unless object.gender != nil %> 
<div class="form-group row"> 
    <%= f.label(:gender, :class => "control-label col-xs-4 input-lg") %> 
<div class="col-xs-8"> 
    <%= f.select(:gender, Dropdown.gender,{:prompt =>"Please Choose"},{class: "form-control input-lg"}) %> 
</div> 
</div> 
<% end %> 
+0

Le code ci-dessus ne montre-t-il pas aussi le code HTML puisqu'il ne fait pas partie du ruby ​​(<%= %>? – user2012677

+0

) Si l'instruction renvoie true, la partie gender apparaîtra en HTML. je ne le rends pas, donc pas non plus en HTML –

+0

Si je ne le rends pas avec un caché, les valeurs se perdent et je reçois des erreurs de validation Utilisé l'instruction if else, mais bonne recommandation merci – user2012677