Эшафот и столбец типа Array - PullRequest
1 голос
/ 22 марта 2012

Я создал модель, контроллер и вид с рельсовым генератором лесов:

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 Ответ

2 голосов
/ 22 марта 2012

Зависит от того, как структурирован ваш взгляд.Из того, что я вижу, должен быть один ввод текста или что-то, в которое вы вводите теги, разделенные запятой.Не удивительно, что он приходит как строка!В этом случае ваш обходной путь правильный.Я бы добавил разделение начальных и конечных пробелов.

@tmp["tags"] = @tmp["tags"].split(',').map(&:strip)

Чтобы получить реальный массив в параметрах, ваш HTML должен выглядеть так:

<input type='text' name='tags[]' />
<input type='text' name='tags[]' />
<input type='text' name='tags[]' />

Где хранится каждый из этих входных данныходин тег.

...