views:

256

answers:

3

So I have this create form to create schedules where there is a bunch of fields and one of them is seasons. And seasons table has a field called 'is_current' which if set to 1 tells us that it is the current season. When the create form is display , I want the current season to be selected by default in the seasons drop down. Any help will be appreciated. Thanks.

A: 

I believe it would be something like

#controller
@seasons = Season.all    
@current_season = seasons.detect{ |s| s.is_current==true }

#view    
select('schedule', 'season_id', @seasons.collect{ |s| [s.name, s.id] },
       :selected => @current_season)

Edit

Sorry for the misunderstanding... I would try something like the following:

Create a named_scope on Season model

named_scope :current, :conditions => "is_current = true"

and try to set up this option

config.columns[:seasons].options = {:selected => Season.current}

I don't know if it works. It's just a shot.

j.
You shouldn't make model calls in views.
vonconrad
I did't actually said to do the call in the view, but I'll specify
j.
A: 

You can use the :selected attribute in the select form method, though this will expect the value of the option tag. Let's make a simple dropdown that has the ID of the season as the option value, the name of the season as what the user sees and a specific record selected by default, like this:

<option value="123" selected="selected">Name of season</option>
<option value="234">Another season</option>

In this case, the :selected attribute will expect 123, so that it knows to make it the default value.

You can accomplish that with the following code:

Controller:

@seasons        = Season.all
@current_season = @seasons.detect{|s| s.is_current == 1}.id

View (in a form_for statement):

<%= f.select :season_id, @seasons.collect {|s| [s.name, s.id]}, :selected => @current_season %>
vonconrad
A: 

I found the solution. You have to add a piece of code in the appropriate helper file, in my case the schedules_helper.rb.

def seasons_list
  s = Season.find(:all, :order => 'is_current DESC').map{|t| [t.name, t.id]}
end

This will make sure the current season is always the first option of the drop down and hence by default is selected.

Thanks all, for your answers.

Swamy g