0

MongoMapperモデルがあり、カンマ区切りの文字列を保存する配列に変換しようとしています。

主な問題は、などの文字列がtags = "first,second,third"データベース内ののような配列に変換されないこと["first","second","third"]です。代わりに、として入り["first,second,third"]ます。

他にも奇妙なことが起こっています:1)preen_tagsには、unlesstags.nilを含める必要があります。preen_tagsの2)行ごとに、デバッガーを使用するとtagsnilが返されます

これが私のモデルです

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
4

2 に答える 2

0

これは、デフォルトでは、タグは、定義したようにMongoMapperの配列であるためです。だからあなたはtags.empty?代わりに試すことができますtags.nil?

最後のケースでは、タグの最初の要素を取得しようとしたため、タグはnilになりますが、内部に誰もありません。ただゼロ。タグはnilになります。

于 2010-06-25T07:00:29.237 に答える
0

文字列をモデルに渡す前に、コントローラー内で文字列を配列に変換することで問題が解決したようです。

于 2010-06-25T07:36:20.710 に答える