select_tag正在排序(奇怪)[Rails]

时间:2009-02-09 17:25:07

标签: ruby-on-rails html-select

我有一个看起来像这样的选择框(在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()对值进行排序   字母顺序。

除了哈希之外还有什么我可以使用的吗?

3 个答案:

答案 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