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