Check if value has already been used

Hi,

Im currently working on an issue im having with a ruby method within my
rails project.

i have this method:

    def saveAssetTags(asset, taglist)
     #add new tags

     tagList = taglist.split(/\s*\,\s*/)
     #drop all current tags
     asset.tags.clear
     for metadata in tagList
       tag = Tag.find_by_Tag(metadata)
       unless tag
         tag = Tag.new
         tag.Tag = metadata
         tag.save
       end
       asset.tags << tag
     end

  end

its taking in a list of tags from the client seperated by comma's and
putting them into an array before saving them in my database. this all
works fine unless a user enters the same tag twice in which case i get a
duplication error in the db.

whats the best way to check the array for repeating attributes or to
check as i iterate through the loop?

Cheers,

Chris

···

--
Posted via http://www.ruby-forum.com/.

Alle mercoledì 19 dicembre 2007, Chris Gallagher ha scritto:

Hi,

Im currently working on an issue im having with a ruby method within my
rails project.

i have this method:

    def saveAssetTags(asset, taglist)
     #add new tags

     tagList = taglist.split(/\s*\,\s*/)
     #drop all current tags
     asset.tags.clear
     for metadata in tagList
       tag = Tag.find_by_Tag(metadata)
       unless tag
         tag = Tag.new
         tag.Tag = metadata
         tag.save
       end
       asset.tags << tag
     end

  end

its taking in a list of tags from the client seperated by comma's and
putting them into an array before saving them in my database. this all
works fine unless a user enters the same tag twice in which case i get a
duplication error in the db.

whats the best way to check the array for repeating attributes or to
check as i iterate through the loop?

Cheers,

Chris

I can think of two approaches. If you don't want to take any special action if
there are duplicates tags (such as report an error), you can remove the
duplicates from the array using the Array#uniq method:

tagList = taglist.split(/\s*\,\s*/).uniq

The other possibility is to store the found tags in a hash or array. Something
like:

found_tags = {}
for metadata in tagList
  if found_tags.has_key? metadata
    #do what you need to do for a duplicate tag.
  else
    found_tags[metadata] = true
    #do what you need to do for a non-duplicate tag
  end
end

I hope this helps

Stefano

not to worry, found the answer myself by thinking about it.

just added .uniq to tagList :0

Thanks,

Chris

···

--
Posted via http://www.ruby-forum.com/.

thanks stefano :slight_smile: good to know I was on the right track!

···

--
Posted via http://www.ruby-forum.com/.