Преобразование строки из веб -формы в модель Mongomapper с массивом DataType
-
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?
В последнем случае теги становится ноль, потому что вы пытаетесь получить первый элемент тегов, но внутри никого нет. Просто нуль. Вы теги становится ноль.