所以我有这个创建表单来创建日程表,其中有一堆字段,其中一个是季节。而season表有一个名为'is_current'的字段,如果设置为1则告诉我们它是当前的季节。当显示创建表单时,我希望在季节下拉菜单中默认选择当前季节。任何帮助将不胜感激。感谢。
答案 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
这将确保当前季节始终是下拉列表的第一个选项,因此默认情况下会被选中。
谢谢大家,谢谢你的回答。