开发者

ActiveScaffold: How do I set the default value for a drop down list?

开发者 https://www.devze.com 2022-12-29 02:21 出处:网络
So I have this create form to create schedules where there is a bunch of fields and one of them is seaso开发者_C百科ns. And seasons table has a field called \'is_current\' which if set to 1 tells us t

So I have this create form to create schedules where there is a bunch of fields and one of them is seaso开发者_C百科ns. 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.


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


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消