2011-12-22 50 views
0

這是_form.html.erb中的simple_form代碼。如何在變量中傳遞數組:for rails for form?

<%= f.input :start_time, :label => "Start Time:", :collection => @time_slot %> 

@time_slot是在控制器中定義的變量。它是一個陣列,如下所示:

@time_slot = ['00:30 AM','01:00 AM','01:30 AM','02:00 AM','02:30 AM','03:00 AM' ,'03:30 AM','04:00 AM','04:30 AM'] 

問題是呈現的視圖沒有列出預定義時間段的下拉菜單。相反,它只顯示一個文本框。

如何顯示下拉時間段而不是文本框?謝謝。

回答

1

首先:輸入在v2.3.8中被棄用,所以如果你使用的是Rails3,你可能不應該使用輸入。相反,使用適當的形式傭工,對於一個下拉框(或選擇標籤)你會想:

http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select

,但如果你一定要 - 你或許可以通過輸入型如:type => :select但我我從來沒有嘗試過,它可能無法正常工作。

+0

:type =>:select沒有工作。試過:as =>:選擇並不適用。我可以將@time_slot移動到視圖中,並將其定義爲:collection => [....]。然而,視圖代碼看起來笨重和醜陋。這就是爲什麼我想在控制器中定義它並在視圖中重新使用它的原因。不管怎麼說,還是要謝謝你。 – user938363 2011-12-23 01:17:57

+0

問題是@time_slot必須在控制器中的方法中定義,例如new,edit,以便傳遞到視圖中。在控制器頂部定義的值沒有被傳遞到視圖中。是否有意義? – user938363 2011-12-23 01:53:31

+0

問題是@time_slot的值未傳遞到視圖中。我所做的是在控制器中定義一個set_time_slot方法,以返回time_slot數組,並將其放入helper_method以使其可用於視圖。也可以放在before_filter中,在控制器中的其他任何東西之前運行set_time_slot。這裏是一個帖子:http://railsforum.com/viewtopic.php?id=21354 – user938363 2011-12-23 02:17:14