我有一个MongoMapper模型,我正在尝试将逗号分隔的字符串转换为要存储的数组。
主要问题是诸如tags = "first,second,third"
之类的字符串未转换为数据库中的数组,如["first","second","third"]
。取而代之的是["first,second,third"]
。
还有其他一些奇怪的事情发生了:
1)在preen_tags中我必须包含除非tags.nil?在每一行之后
2)在preen_tags中,使用调试器tags
返回nil
这是我的模特
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
答案 0 :(得分:0)
这是因为默认标签是MongoMapper中的一个数组,就像你定义它一样。因此,您可以尝试使用tags.empty?
代替tags.nil?
在最后一种情况下,标签变为零,因为您尝试获取标签的第一个元素,但内部没有人。只是零。你的标签变成了零。
答案 1 :(得分:0)
看起来在将String传递给模型之前将String转换为控制器内的数组已经解决了问题。