2009-02-09 59 views
2

我有一个选择框,看起来像这样(一的form_for内)select_tag是排序(奇怪)的Rails]

<%=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()按字母顺序排列 中的值。

有没有什么我可以用散列?

回答

9

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

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

这应该就够了。请查看api.rubyonrails.com的文档。

+0

优秀。正是我需要的。谢谢。 – 2009-02-09 17:42:14

0

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

这应该为你

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

响应您的评论编辑工作:对于集合看到collection_select

+0

很酷,谢谢HermanD。我只是输入:)在集合方面的任何简单的解决方法? – 2009-02-09 17:30:34

2

在你的模型,定义哈希(你的情况你的模式是“无所谓”,你的哈希“无聊症”):

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

在你把你的哈希值,类型选择标签

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

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

保存后,当你拉一个无论背出数据库和要显示的字段等等,这样做

Whatever::BLAHS.index whatever.blah 

别人的作品中提到数组的数组,但是当你想显示无论如何,你如何以一种不错的方式来表现等值?我建议坚持使用散列,因为它解决了这个问题。