ActiveScaffold:如何设置下拉列表的默认值?

时间:2010-05-06 00:07:04

标签: ruby-on-rails ruby activescaffold

所以我有这个创建表单来创建日程表,其中有一堆字段,其中一个是季节。而season表有一个名为'is_current'的字段,如果设置为1则告诉我们它是当前的季节。当显示创建表单时,我希望在季节下拉菜单中默认选择当前季节。任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分:0)

我相信它会像

#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)

修改

对于误会感到抱歉......我会尝试以下内容:

named_scope型号

上创建Season
named_scope :current, :conditions => "is_current = true"

并尝试设置此选项

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

我不知道它是否有效。这只是一个镜头。

答案 1 :(得分:0)

您可以使用:selected表单方法中的select属性,但这会期望option标记的值。让我们制作一个简单的下拉列表,其中包含季节ID作为选项值,季节名称作为用户看到的内容以及默认选择的特定记录,如下所示:

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

在这种情况下,:selected属性将为123,因此它知道将其设为默认值。

您可以使用以下代码完成此操作:

控制器:

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

查看(在form_for语句中):

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

答案 2 :(得分:0)

我找到了解决方案。您必须在相应的帮助文件中添加一段代码,在我的例子中是schedules_helper.rb。

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

这将确保当前季节始终是下拉列表的第一个选项,因此默认情况下会被选中。

谢谢大家,谢谢你的回答。