0

我正在尝试eventsinvtime表单中选择多个。

邀请时间

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>

谢谢您的帮助!

4

2 回答 2

0

["", "62"]:Array的未定义方法 `to_i'

来自文档:

:include_blank - 如果选择元素的第一个选项元素为空白,则设置为 true 或提示字符串。如果选择元素不需要默认值,则很有用。

所以尝试添加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 ) %>
于 2013-10-18T18:42:01.127 回答
0

选择助手不知道如何处理这样的集合,它假定第一个值是一个 ID,第二个值是一个字符串,您也许可以反转您的方法调用,但这并不是真正正确的方法创建一个选择标签,而不是collection_select 按照 dax 的建议使用或使用options_from_collection_for_select帮助器:

<%= f.select :event_id, options_from_collection_for_select(Event.all, :id, :title), {}, :multiple => true %>
于 2013-10-18T18:47:04.333 回答