将字符串从Web窗体转换为具有Array数据类型的MongoMapper模型

时间:2010-06-25 06:02:29

标签: ruby-on-rails mongomapper

我有一个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

2 个答案:

答案 0 :(得分:0)

这是因为默认标签是MongoMapper中的一个数组,就像你定义它一样。因此,您可以尝试使用tags.empty?代替tags.nil?

在最后一种情况下,标签变为零,因为您尝试获取标签的第一个元素,但内部没有人。只是零。你的标签变成了零。

答案 1 :(得分:0)

看起来在将String传递给模型之前将String转换为控制器内的数组已经解决了问题。