2012-03-22 41 views
1

我已经创建了模型,控制器和视图与导轨支架发生器:脚手架和数组类型列

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) 

而我只是想知道如果有什么更好的办法来解决我的错误?

回答

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[]' /> 

如果每个这些输入保存单个标签。

+0

是否有可能设置轨道,脚手架发电机将生成一组输入标签(如你的例子)? – demas 2012-03-22 11:46:05

+0

我不确定。你可以试试。我在这里闻到一篇很好的博客文章。 :) – 2012-03-22 11:48:26