Rails多选择获取未定义的方法`to_i'

时间:2013-10-18 18:35:14

标签: ruby-on-rails

我正在尝试以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>

感谢您的帮助!

2 个答案:

答案 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 suggestsuse the options_from_collection_for_select helper

<%= f.select :event_id, options_from_collection_for_select(Event.all, :id, :title), {}, :multiple => true %>