使用collection_select渲染数组下拉列表时触发错误
解决collection_select调用时的"undefined method `map' for String"错误
嘿,我一眼就看出问题所在啦——你的@parts根本不是Ruby数组,而是一个长得像数组的JSON字符串!collection_select需要的是可迭代的集合(比如数组、ActiveRecord集合),而字符串没有map方法,所以才会抛出这个错误。
两步搞定这个问题:
把字符串解析成真正的Ruby数组
你需要在控制器里先把这个JSON字符串转成Ruby数组,用JSON.parse方法就行:# 在你的控制器动作里添加这行 @parts = JSON.parse(@parts)这样处理后,
@parts就变成了真正的数组:["", "Jacket", "Shirt"]。修正collection_select的参数
因为你的数组元素都是普通字符串,不是对象,所以不需要:to_s这个参数(这个是用来从对象中提取属性的)。改成用:itself来指定选项的value和显示文本:<%= form.collection_select(:parts, @parts, :itself, :itself, include_blank: false, prompt: "Select the part") %>如果你想去掉数组里的空字符串,还可以在解析后加一步过滤:
@parts = JSON.parse(@parts).reject(&:blank?)
额外小提示
如果这个字符串是从数据库或者外部接口获取的,最好在数据存入的时候就处理成数组类型(比如Rails里用text字段配合serialize :parts, Array),这样后续就不用每次手动解析啦。
内容的提问来源于stack exchange,提问作者Amitoj Singh
相关产品推荐
相关产品推荐

