1

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.

Swamy g
  • 2,106
  • 4
  • 23
  • 35
  • I appreciate your answers, but my question is how to achieve this in ActiveScaffold. ActiveScaffold genereates views dynamically. Please refrain from general rails answers. Thank you. – Swamy g May 06 '10 at 05:13
  • Can't you just change it on the view you have the drop down? Or you're talking about many views? – Ju Nogueira May 06 '10 at 12:07
  • The views are dynamically generated. There are no .rhtml or .erb files. ActiveScaffold requires configuration in controller for the generated views. – Swamy g May 06 '10 at 17:17
  • Right... I'm sorry for the misunderstood. I've updated my answer. – Ju Nogueira May 06 '10 at 18:29

3 Answers3

0

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.

Ju Nogueira
  • 8,435
  • 2
  • 29
  • 33
0

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
  • 25,227
  • 7
  • 68
  • 69
0

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
  • 2,106
  • 4
  • 23
  • 35