我的表单中有以下选择框:
Related Type: <%= f.select(:TYPE, [['Type A', 'Type A'],
['Type B', 'Type B'],
['Type C', 'Type C'],
['Type D', 'Type D'],
['Type E', 'Type E']
],{ :prompt => "Please select"}
) %>
我希望允许用户进行多项选择,并且还可以选择框5的大小。
如何为上面的代码执行此操作?
答案 0 :(得分:75)
在{ :prompt => "Please select"}
添加另一个带有html选项的哈希之后,例如
<%= f.select(:TYPE, [['Type A', 'Type A'],
['Type B', 'Type B'],
['Type C', 'Type C'],
['Type D', 'Type D'],
['Type E', 'Type E']
],{ :prompt => "Please select"},
{ :multiple => true, :size => 5 }
) %>
完成此操作后,您可能希望移动:prompt
选项(保留空{}
,以便html属性不会被视为Rails选项。)
此外,您还需要确保您的控制器代码正确接受和处理多个值。
答案 1 :(得分:9)
如果是收集,请尝试
<%= f.select(:TYPE, Categories.collect {|p| [ p.name, p.id ] },
{ :prompt => "Please select"},
{ :multiple => true, :size => 5 }) %>
答案 2 :(得分:7)
我有一个完整的工作示例(包括编辑对象时的预选),时间:
Object
是被视为对象similar_ids
是关系的关键,是string
表格形式:
form_for(@object) do |f|
= f.select :similar_ids, options_from_collection_for_select(Object.all, :id, :name, {:selected => @object.similar_ids.split(';')}), {}, {:multiple => true, :size => 4, :name => 'object[similar_ids][]'}
在Object.rb
模型中:
class Object < ActiveRecord::Base
before_save :handle_similars
def handle_similars
self.similar_ids = self.similar_ids.select(&:present?).join(';')
# .select(&:present?) is necessary to avoid empty objects to be stored
end
def similars
self.class.find(self.similar_ids.split(';'))
end
end
这些帖子帮助了我:
希望有所帮助
答案 3 :(得分:0)
{:prompt =&gt; “请选择”},{:multiple =&gt; true,:size =&gt; 5} {}在f.select
时很重要答案 4 :(得分:0)
HTML
<%= form.select(:product_ids, Product.all.collect {|p| [ p.name, p.id ] },
{ :prompt => "Please select"},
{ :multiple => true, :size => 5 }) %>
控制器
@category = Category.new(category_params)
def category_params
params.require(:category).permit(:name, product_ids: [])
end
答案 5 :(得分:-1)
<%= f.select :tag_ids, Tag.all.collect {|t| [t.name, t.id]}, { :prompt => "Please select"}, { :multiple => true, :size => 5 } %>