支架和阵列类型列

时间:2012-03-22 11:30:48

标签: ruby-on-rails mongodb mongoid

我用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)

我只是想知道是否有更好的方法来解决我的错误?

1 个答案:

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

其中每个输入都包含一个标记。