Html 轨道';集合“选择帮助器方法和”;创建项目";最后的选择
是否可以将Html 轨道';集合“选择帮助器方法和”;创建项目";最后的选择,html,ruby-on-rails,Html,Ruby On Rails,是否可以将添加到使用集合\u select助手方法创建的的末尾 现在我有 f.collection_select(:category_id , @categories, :id, :name, {:prompt => 'Please select a category'}) 产生 <select id="product_category_id" name="product[category_id]"> <option value="">Please selec
添加到使用集合\u select
助手方法创建的
的末尾
现在我有
f.collection_select(:category_id , @categories, :id, :name, {:prompt => 'Please select a category'})
产生
<select id="product_category_id" name="product[category_id]">
<option value="">Please select a category</option>
<option value="7">category one</option>
<option value="8">category 2</option>
</select>
请选择一个类别
第一类
第2类
我想要的是
<select id="product_category_id" name="product[category_id]">
<option value="">Please select a category</option>
<option value="7">category one</option>
<option value="8">category 2</option>
<option value="new">..or create a new one</option>
</select>
请选择一个类别
第一类
第2类
…或者创建一个新的
这是可能的,还是我应该在集合中循环并手动生成选项?简短回答:否
长回答:当然,但你必须狡猾
- 创建这样一个类:
class New_option_placeholder def id "new" end def name "...or create a new one" end end
- 不要传递
,而是传递@categories
@categories+New\u选项\u占位符。New
如果(如注释所示)您正在寻找更简洁的内容,您可以
要求“ostruct”
,然后传递@categories+[OpenStruct.new(:id=>'new',:name=>'…或创建一个新的])]
来完成基本相同的任务 您可能应该使用选择
像这样:
f.select(:category_id, @categories.collect {|p| [ p.name, p.id ] } + [ [ 'Or create a new one', 'new' ] ], {:include_blank => 'Please select a category'})
祝你好运 同意简短回答“不”和长篇回答“狡猾”,但我刚才做的是,我认为比这两种解决方案中的任何一种都简单,并且对我有效:
将下一行包装在erb标签内,即
:
f.collection\u选择:advision\u group\u id,advisementGroup.find(:all,:order=>“name DESC”)“New group”),:id,:name,:include\u blank=>true
只需使用.new
创建一个新对象,并随:include_blank=>true
一起输入您想要显示的任何文本即可。我无法评论,否则我会将其添加到上面的答案中
获取选项->值“新建”,“或创建一个新的”。。而不是
f.select(:category_id, @categories.collect {|p| [ p.name, p.id ] } + ['Or create a new one','new'], {:include_blank => 'Please select a category'})
做
注意选项周围的额外[]。这使得数组作为选项、值对工作。。这会创建两个额外的选项,都是name等于value,“或者创建一个新的”和“new”,我也尝试用散列代替数组,散列[“name”,“create a new one”,“id”,“new”],但是我得到了一个“无法将散列转换为数组”。。数字…所以。。这就可以了,但是,关于如何设置一个与选项中的文本不同的值,有什么想法吗?这可能是可行的,但这是一个太多的解决方法,所以我想我会选择Gdeglin的解决方案+1仍然是因为它实现了我想要的我认为当你得到Gdeglin的解决方案时,你会有比这个更多的运动部件。如果你只是在寻找一个单行版本,我会添加一个。。。
f.select(:category_id, @categories.collect {|p| [ p.name, p.id ] } + ['Or create a new one','new'], {:include_blank => 'Please select a category'})
f.select(:category_id, @categories.collect {|p| [ p.name, p.id ] } + [['Or create a new one','new']], {:include_blank => 'Please select a category'})