Rails: Hide form field when value is popuated

1.4k Views Asked by At

I have this form. When the object has a value for gender, I want to change the gender field to a hidden field, so the user does not need to see it. What is the best way to do this?

    <%= 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 %>
2

There are 2 best solutions below

1
On BEST ANSWER

You could simply use an if statement to render different field types based on whether gender is set or not:

  <% 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 %>
4
On

Instead of hidding it, it's better to not rendering it. Try it like this:

<% 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 %>