Преобразование строки из веб -формы в модель Mongomapper с массивом DataType

StackOverflow https://stackoverflow.com/questions/3115898

  •  29-09-2019
  •  | 
  •  

Вопрос

У меня есть модель Mongomapper, и я пытаюсь преобразовать запятую строку в массив для хранения.

Основная проблема заключается в том, что строка, такая как tags = "first,second,third" не преобразуется в массив в базе данных, как ["first","second","third"]. Анкет Вместо этого это происходит как ["first,second,third"].

Есть и другие странные вещи: 1) в Preen_Tags я должен включить, если только Tags.nil? После каждой строки 2) в PREEN_TAGS, используя отладчик tags Возвращает ноль

Вот моя модель

class Template
  include MongoMapper::Document
  validate :validate_tags
  after_validation :preen_tags

  key :template_id,     ObjectId

  key :title,           String
  key :description,     String

  key :tags,            Array

  timestamps!

  def validate_tags
    errors.add_to_base "You Must Enter At Least 1 Tag." if tags.blank? 
  end


  def preen_tags
    #return if tags.nil?     #why doesn't this work??
    #only alphanumeric chars allowed, except hyphens and commas
    tags = tags[0] if tags.is_a?(Array)
    tags = tags.gsub(/[^0-9a-z\-\,]/i, '') unless tags.nil?
    #convert spaces to hyphens
    tags = tags.gsub(/\s/, '-') unless tags.nil?
    tags = tags.split(",") unless tags.nil?
  end

end
Это было полезно?

Решение 2

Похоже на преобразование строки в массив внутри контроллера, прежде чем передавать ее в модель решила.

Другие советы

Это потому, что по умолчанию теги - это массив в Mongomapper, как вы его определяете. Так что вы можете попробовать tags.empty? вместо tags.nil?

В последнем случае теги становится ноль, потому что вы пытаетесь получить первый элемент тегов, но внутри никого нет. Просто нуль. Вы теги становится ноль.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top