2010-05-05 146 views
6

我需要在<options>的列表中生成一个带有默认值的选择菜单。这是我需要它的样子。Ruby on rails:选择带默认值属性的选项菜单

<select name="menu[parent_id]" id="menu_parent_id"> 
<option value="0">==None==</option> 
<option value="34">TEST</option> 
</select> 

目前我使用这个select帮手在我的形式

<%= f.select(:parent_id, @parent_menus.collect {|p| [ p.name, p.id ] }, {:include_blank => '==None=='})%> 

上面的代码产生这样; (value=""

<select name="menu[parent_id]" id="menu_parent_id"> 
<option value="">==None==</option> 
<option value="34">TEST</option> 
</select> 

是否有人在这里可以告诉我一个方法来添加value="0"选项列表?

回答

9
<%= f.select(:parent_id, [["==None==", 0]] + @parent_menus.collect {|p| [ p.name, p.id ] }) %> 
+0

这里是我得到的是, '<期权价值= “== ==无”> == ==无' 其实我正在寻找类似这样的东西 '' – randika 2010-05-05 10:15:43

+0

对不起,我的错。我忘了一个[]。看看我的更新。 – 2010-05-05 12:28:19

+0

Hooray它的工作!谢谢一堆西蒙娜。我会以此作为答案。 – randika 2010-05-06 06:32:29

1

尝试

<%= f.select(:parent_id, options_for_select(["==None==", 0] + @parent_menus.collect {|p| [ p.name, p.id ] }, 0)) %> 
0

我不知道这是Ruby的方式或没有,但这样会definietly工作

<%= f.select(:parent_id, "<option value='0'>Please select</option>"+options_for_select(@parent_menus.collect {|p| [ p.name, p.id ] }))%> 

编辑。对于根据数据库中保存的值预先选择,我认为@user是你的对象包含下面例子的数据库值。

<%= f.select(:parent_id, "<option value='0'>Please select</option>"+options_for_select(@parent_menus.collect {|p| [ p.name, p.id ] }, @user.id))%> 
+0

请检查我编辑答案希望有所帮助。 – Salil 2010-05-05 12:11:24

1

思想我想补充一点,以任何人都希望做一个默认选择的值,在下拉的对象之一,而不是一个“无”的价值。即,您正在编辑一个选定了先前值的表单,并且您不希望在编辑页面上丢失之前的值:

假设您有一组父母在@parents中,并且您的表单已被绑定到@my_messed_up_family调用,@my_messed_up_family对象有一个 '父亲':

= f.label :parent_id, "Choose which of your parents is your father? 

= f.select :parent_id, options_from_collection_for_select(@parents.sort_by {|n| n.name}, "id", "name", :selected=>@my_messed_up_family.father.id)