2010-05-06 118 views
0

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

+0

我很欣赏你的答案,但我的问题是如何在ActiveScaffold中实现这一点。 ActiveScaffold动态生成视图。请避免一般的铁轨答案。谢谢。 – 2010-05-06 05:13:50

+0

难道你只是改变它的视图,你有下拉?或者你在谈论很多观点? – 2010-05-06 12:07:25

+0

视图是动态生成的。没有.rhtml或.erb文件。 ActiveScaffold需要在控制器中为生成的视图进行配置。 – 2010-05-06 17:17:48

回答

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) 

编辑

对不起,误会......我会尝试像下面这样:

Season模型创建一个named_scope

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

并尝试设置此选项

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

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

+0

您不应该在视图中进行模型调用。 – vonconrad 2010-05-06 00:51:30

+0

我实际上并没有说要在视图中进行呼叫,但我会指定 – 2010-05-06 00:57:50

0

您可以使用select表单方法中的:selected属性,虽然这会预计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 %> 
0

我找到了解决办法。你必须在适当的帮助文件中添加一段代码,在我的例子中是schedules_helper.rb。

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

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

谢谢大家,为您解答。