如何在变量中传递数组:for rails for form?

如何在变量中传递数组:for rails for form?

问题描述:

这是_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'] 

问题是呈现的视图没有列出预定义时间段的下拉菜单。相反,它只显示一个文本框。

如何显示下拉时间段而不是文本框?谢谢。

首先:输入在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