Преобразование строки из веб-формы в модель MongoMapper с типом массива данных - PullRequest
0 голосов
/ 25 июня 2010

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

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

. Также происходят и другие странные вещи: 1) В preen_tags я должен включить файл tags.после каждой строки 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 голосов
/ 25 июня 2010

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

0 голосов
/ 25 июня 2010

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

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

...