ben
ben

Reputation: 6180

how to set selected value in <%= f.select_tag %> dropdown list, how?

i have a long list dropdown menu including all currencies, i want the last selected value to be the default selected value in the list. i am using Rails 4.0.0 and ruby 2.0.0

i am not using a model, i am just using a controller. i have put the dropdown list options inside a helper.

form.html.erb

<div class="calculator">

    <%= form_for :convertor, :url => {:controller => "converter", :action => "show" } do |f| %>

        <%= f.label :from_currency %>
        <%= f.select :from_currency, options_for_select(currencies, :selected => params[:from_currency]) %>
        <%= f.text_field :amount, :placeholder => "Amount", id: "textfield" %>
        <%= @amount %>
        <br>

        <%= f.label :to_currency %>
        <%= f.select :to_currency, options_for_select(currencies, :selected => params[:to_currency].to_i ) %>
        <%= @result %>
        <br>

        <%= f.submit "Calculate", class: "btn btn-large btn-primary", id: "submitButton" %> 
    <% end %>

</div>

the list options are loaded from a helper *<%= f.select :to_currency, options_for_select(currencies, :selected => params[:to_currency].to_i ) %>* with name currencies

the dropdown list, in a helper

def currencies
    [
        ['United Arab Emirates Dirham (AED)', 'AED'],
        ['Netherlands Antillean Guilder (ANG)', 'ANG'],
        ['Argentine Peso (ARS)', 'ARS'],
        ['Australian Dollar (A$)', 'AUD'],
        ['Bangladeshi Taka (BDT)', 'BDT'],
        ['Bulgarian Lev (BGN)', 'BGN'],
        ['Bahraini Dinar (BHD)', 'BHD'],
    ]
end

what am i doing wrong here?

Upvotes: 1

Views: 1283

Answers (3)

ben
ben

Reputation: 6180

this can help

<%= f.label :from_currency %>
            <% if @from_cur.present? %>
                <%= f.select :from_currency, options_for_select(currencies,  @from_cur)  %>
            <% else %>
                <%= f.select :from_currency, options_for_select(currencies), :required => true %>
            <% end %>
            <%= f.text_field :amount, :placeholder => "Amount", :required => true, id: "textfield"  %>
            <br>

            <%= f.label :to_currency %>
            <% if @from_cur.present? %>
                <%= f.select :to_currency, options_for_select(currencies,  @to_cur), :required => true %>
            <% else %>
                <%= f.select :to_currency, options_for_select(currencies), :required => true %>
            <% end %>

i appreciate.

Upvotes: 0

Amit Sharma
Amit Sharma

Reputation: 3477

This code works for me.

in application helper

module ApplicationHelper
  def opts_for_select_cur
    opts_for_select = [
      ['United Arab Emirates Dirham (AED)', 'AED'],
      ['Netherlands Antillean Guilder (ANG)', 'ANG'],
      ['Argentine Peso (ARS)', 'ARS'],
      ['Australian Dollar (A$)', 'AUD'],
      ['Bangladeshi Taka (BDT)', 'BDT'],
      ['Bulgarian Lev (BGN)', 'BGN'],
      ['Bahraini Dinar (BHD)', 'BHD'],
    ]

    return opts_for_select
  end
end

and in view

<script type="text/javascript">
 $(document).ready(function(){

 $('#st').change(function(){
  var inputText = $('#st :selected').val();
  $("#hidden_one").val(inputText);

  $("a").attr("href", "?value="+inputText );

 });
 $('#aa').click(function(){
  var inputText = $('#st :selected').val();
  $("a").attr("href", "?value="+inputText );
});

});

<%= f.select :text, options_for_select(opts_for_select_cur, params[:value]), {}, { id: "st" } %>
<br>
<%= link_to "refresh",nil, id: "aa" %>

the result is a select box with selected value.

Upvotes: 0

Ryan Bigg
Ryan Bigg

Reputation: 107718

A couple of things:

  1. options_for_select takes two arguments: the list of options and the value that you want selected.
  2. You're passing through the value as a hash: :selected => params...
  3. The parameter name is wrong.

In your controller, you're saying that the parameter is called this:

params[:convertor][:from_currency]

But in your view, you have params[:from_currency].

Therefore, the solution to this is to do this:

<%= f.select :from_currency, options_for_select(currencies, params[:convertor][:from_currency]) %>

Upvotes: 1

Related Questions