我目前有这样的事情(HAML):
=form_for @users do |u|
%p=u.label :name
%p=u.text_field :name
%p=u.label :surname
%p=u.text_field :surname
%strong='Section'
=u.collection_select(:section_id, Section.all, :id, :name)
如何在collection_select中添加一个不仅仅是空值的附加选项?如果我使用“:prompt =>'请选择一个选项'”这只会在select的顶部添加提示,但如果我想添加类似“None”的值为“5”的内容怎么办?像这样:
<option value="5">None</option>
<option value="1">One</option>
<option value="2">Two</option>
我的印象非常简单,我看不到它。
答案 0 :(得分:2)
看起来您的特殊选项是id为5且名称为“None”的部分。这意味着您可以将其添加到数据库中所有部分的数组中。您可能应该在控制器操作中执行此操作:
@sections = []
@sections << Section.new(id: 5, name: "None")
@sections += Section.all
然后在您的视图中使用它。
= u.collection_select(:section_id, @sections, :id, :name)
答案 1 :(得分:0)
您可以通过自定义帮助方法实现它,例如:
def custom_section_collection_select
section_options = []
Section.each do |sec|
section_options << content_tag(:option, "#{sec.name}", value: sec.id)
end
section_options << content_tag(:option, "None", value: "5")
section_options # return value
end
然后在视图中调用:
= u.custom_section_collection_select
注意强> 建议不要使用硬编码值(如5或任何其他内容),就像创建可能具有相同ID的部分一样。
<强> 更新 强>
def custom_collection_select(model, text, val, with_default)
options = []
model.to_s.classify.constantize.each do |rec|
options << content_tag(:option, "#{rec.send(text)}", value: rec.send(val))
end
options << content_tag(:option, "None", value: "5") if with_default
options # return value
end
然后在视图中:
= u.custom_collection_select("section", :name, :id, true)