Ruby on Rails – 在f.select中多选

我的表单中有以下select框:

Related Type: &nbsp; <%= 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"} ) %> 

我想让用户做出多个select,并使select框5的大小。

如何为上面的代码做到这一点?

在您的{ :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选项(尽pipe保留空{}这样html属性不会被视为Rails选项。

您还需要确保您的控制器代码正确接受和处理多个值。

收集的情况下,尝试

  <%= f.select(:TYPE, Categories.collect {|p| [ p.name, p.id ] }, { :prompt => "Please select"}, { :multiple => true, :size => 5 }) %> 

我有一个完整的工作示例(包括编辑对象时的预选),当:

  • Object是被考虑的对象
  • similar_ids是关系的关键,是一个string

forms如下:

 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 

这些post帮助我:

  • select具有预选多个值的标签 – 在数据库中手动插入值
  • Ruby on Rails:在表单中提交一个数组

希望能帮助到你

{:prompt =>“请select”},{:multiple => true,:size => 5} {}当f.select