我正在尝试以events
形式选择多个invtime
。
Invtime
has_many :events
这是我的表单代码:
<%= f.select :event_id, Event.all.collect {|x| [x.title, x.id]}, {}, :multiple => true %>
显示效果很好!但是,当我选择最后一个事件并提交时,我得到:
undefined method `to_i' for ["", "62"]:Array
页面检查显示:
<select id="invtime_event_id" multiple="multiple" name="invtime[event_id][]">
<option value="66">Meeting</option>
<option value="62">Auto fill some fields on new workorder</option>
</select>
感谢您的帮助!
答案 0 :(得分:0)
[“”,“62”]的未定义方法`to_i':数组
来自文档:
:include_blank - 如果select元素的第一个选项元素为空,则设置为true或提示字符串。 如果select元素没有默认值,则非常有用。
请尝试添加include_blank: true
<%= f.select(:event_id, Event.all.collect {|x| [x.title, x.id]}, {}, :multiple => true, include_blank: true ) %>
另外,您可以尝试collection_select,其中@events = Event.all
<%= f.collection_select(:event_id, @events, :id, :title, include_blank: true ) %>
答案 1 :(得分:0)
select helper不知道如何处理这样的集合,它假定第一个值是一个ID,第二个值是一个字符串,你可能只能反转你的方法调用,但这不是真正的创建选择标记的正确方法,而不是使用collection_select
as dax suggests或use the options_from_collection_for_select
helper:
<%= f.select :event_id, options_from_collection_for_select(Event.all, :id, :title), {}, :multiple => true %>