La conversión de una cadena desde un formulario web para MongoMapper Modelo con el tipo de datos de matriz
-
29-09-2019 - |
Pregunta
Tengo un modelo MongoMapper y estoy tratando de convertir una cadena delimitada por comas en una matriz para ser almacenados.
El problema principal es que una cadena como tags = "first,second,third"
no está siendo convertida en una matriz en la base de datos como ["first","second","third"]
. En su lugar, va en tan ["first,second,third"]
.
Hay algunas otras cosas extrañas sucediendo así:
1) En preen_tags tengo que incluir el menos tags.nil? después de cada línea
2) en preen_tags, utilizando el tags
depurador devuelve nil
Esta es mi modelo
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
Solución 2
Las apariencias como la conversión de la cadena en una matriz dentro del controlador antes de pasarlo a la modelo ha resuelto las cosas.
Otros consejos
es porque por las etiquetas por defecto es una matriz en MongoMapper como lo definen. Para que pueda probar tags.empty?
en lugar de tags.nil?
En las etiquetas último caso se convierte en cero, puesto que intenta conseguir el primer elemento de etiquetas, pero hay nadie dentro. Sólo nula. Te etiqueta se vuelve nula.