我用rails scaffold generator创建了模型,控制器和视图:
rails g scaffold Todo description:string tags:array
所以我有模特:
class Todo
include Mongoid::Document
field :description, :type => String
field :tags, :type => Array
end
和控制器:
def create
@todo = Todo.new(params[:todo])
@todo.save
但是这种情况(自动生成的代码)我得到的错误告诉我类似的事情:
tags field must be array datatype, but you're trying to use string
所以我修复了控制器:
def create
#@todo = Todo.new(params[:todo])
@tmp = params[:todo]
@tmp["tags"] = @tmp["tags"].split(',')
@todo = Todo.new(@tmp)
我只是想知道是否有更好的方法来解决我的错误?
答案 0 :(得分:2)
取决于您的视图的结构。从我看到的,必须有一个文本输入或其他东西,您输入标签,用逗号分隔。难怪它是一个字符串!在这种情况下,您的解决方法是正确的。不过,我会添加前导空格和尾随空格的删除。
@tmp["tags"] = @tmp["tags"].split(',').map(&:strip)
要在params中获得真正的数组,您的HTML必须如下所示:
<input type='text' name='tags[]' />
<input type='text' name='tags[]' />
<input type='text' name='tags[]' />
其中每个输入都包含一个标记。