2

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

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

4

3 回答 3

9

是的,您应该使用数组数组。您的示例最简单的方法是这样的:

<%=f.select(:whatever_id, [["blah", 0], ["blah2", 1], ["blah3", 2], ["blah4", 3]], {:include_blank => true}) %>

这应该足够了。也可以查看api.rubyonrails.com上的文档。

于 2009-02-09T17:31:58.750 回答
2

在您的模型中,定义您的哈希(在您的情况下,您的模型是“whatever”而您的哈希是“blahs”):

BLAHS = { "blah"=>0, "blah2"=>1, "blah3"=>2 }

在放置哈希的选择标签中,键入

Whatever::BLAHS.sort {|a,b| a[1] <=> b[1]}

这将创建一个数组,如其他答案中所述,按第二项(id/numbers)排序。

保存后,当您从数据库中拉出任何内容并希望显示字段 blah 时,请执行此操作

Whatever::BLAHS.index whatever.blah

别人提到的数组数组是可行的,但是当你想展示一个Whatever时,你如何以一种不错的方式展示blah的值呢?我建议坚持使用哈希,因为它可以解决这个问题。

于 2010-12-16T21:35:21.420 回答
0

问题是 options 参数是一个散列,并且散列没有保证顺序。

这应该适合你

  <%= f.select(:whatever_id, ([["blah",0],["blah2",1],["blah3",2]]), {:include_blank => true}) %>

编辑以回应您的评论:有关收藏,请参阅collection_select

于 2009-02-09T17:30:02.483 回答