我有一个看起来像这样的选择框(在form_for中)
<%=f.select(:whatever_id, {"blah"=>0, "blah2"=>1, "blah3"=>2, "blah4"=>3}, {:include_blank => true}) %>
并且输出很好,但很奇怪......像这样:
<select id="personal_information_whatever_id" name="personal_information[whatever_id]"><option value=""></option>
<option value="1">blah2</option>
<option value="2">blah3</option>
<option value="0">blah</option>
<option value="3">blah4</option></select>
但我希望它按顺序进行...... 发生了什么,我该如何纠正呢?
编辑:我觉得答案与此相关
你永远无法保证任何 用哈希命令。你可以试试 .sort()对值进行排序 字母顺序。
除了哈希之外还有什么我可以使用的吗?
答案 0 :(得分:9)
是的,您应该使用数组数组。您的示例最简单的方法是这样的:
<%=f.select(:whatever_id, [["blah", 0], ["blah2", 1], ["blah3", 2], ["blah4", 3]], {:include_blank => true}) %>
这应该足够了。请查看api.rubyonrails.com处的文档。
答案 1 :(得分:2)
在你的模型中,定义你的哈希(在你的情况下你的模型是“什么”和你的哈希“blahs”):
BLAHS = { "blah"=>0, "blah2"=>1, "blah3"=>2 }
在您放置哈希的select标签中,输入
Whatever::BLAHS.sort {|a,b| a[1] <=> b[1]}
这将创建一个数组,如其他答案中所述,按第二项(id / numbers)排序。
保存后,当您从数据库中取出一个Whatever并想要显示字段时,请执行此操作
Whatever::BLAHS.index whatever.blah
其他人提到的数组数组有效,但是当你想展示一个Whatever时,你如何以一种很好的方式展示blah的价值?我建议坚持使用哈希,因为它解决了这个问题。
答案 2 :(得分:0)
问题是options参数是一个哈希值,而哈希值没有保证顺序。
这应该对你有用
<%= f.select(:whatever_id, ([["blah",0],["blah2",1],["blah3",2]]), {:include_blank => true}) %>
根据您的评论进行修改:有关合并,请参阅collection_select