1

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

4

3 回答 3

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}

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

于 2010-05-06T00:47:17.197 回答
0

您可以:selected在 form 方法中使用该属性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 %>
于 2010-05-06T00:49:57.523 回答
0

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

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

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

谢谢大家,您的回答。

于 2010-05-07T01:49:16.253 回答