2010-05-06 65 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 

這將確保當前季節始終是下拉菜單的第一個選項,因此默認情況下會被選中。

謝謝大家,爲您解答。

相關問題