我遇到一个奇怪的问题,我的选择选项在提交时不会被记住(并且验证失败,重新加载表单)。
这是我的代码
<%= form.select :state, options_for_select(us_states), :include_blank => true %>
以下是us_states的一些内容:
def us_states
[
['Alabama', 'AL'],
['Alaska', 'AK'],
无论我选择什么,它总是选择在选择框中显示空白选项。如果我根本不使用:include_blank,它总是只显示Alabama。所以它只显示第一个字段。
答案 0 :(得分:4)
通过将其作为参数传递给options_for_select
帮助程序来指定所选值。
<%= form.select :state, options_for_select(us_states, form.object.state), :include_blank => true %>
文档here。
答案 1 :(得分:1)
事实证明我所要做的就是将第二个参数传递给options_for_select。
我的工作原理 options_for_select(us_states, @user.state)
答案 2 :(得分:0)
我会告诉你如何在我的应用程序中使用它, 示例
以下代码构成了选择框。
<%= select("product", "id",options_for_select(MobilesLists.get_colors(mobile.mobile_name))) %>
MobilesLists.get_colors的结果如下,
ruby-1.9.2-p290 :011 > MobilesLists.get_colors("Samsung Galaxy Y S5360")
=> [["black", 3], ["bubblegum pink", 5], ["fruity orange", 4], ["metallic grey", 1], ["silver platter", 6], ["white", 2]]
返回一个数组数组。所以,现在它变成了,
<%= select("product", "id",options_for_select([["black", 3], ["bubblegum pink", 5], ["fruity orange", 4], ["metallic grey", 1], ["silver platter", 6], ["white", 2]])) %>
以上示例生成以下HTML
<select id="product_id" name="product[id]"><option value="3">black</option>
<option value="5">bubblegum pink</option>
<option value="4">fruity orange</option>
<option value="1">metallic grey</option>
<option value="6">silver platter</option>
<option value="2">white</option></select>
现在,在我的控制器中,我将按如下方式访问该值
if !params[:product][:id].nil?
@product_id = params[:product][:id].to_i
end