Check if value has already been used

C

Chris Gallagher

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
 
S

Stefano Crocco

Alle mercoled=C3=AC 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 =3D taglist.split(/\s*\,\s*/)
#drop all current tags
asset.tags.clear
for metadata in tagList
tag =3D Tag.find_by_Tag(metadata)
unless tag
tag =3D Tag.new
tag.Tag =3D 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=20
there are duplicates tags (such as report an error), you can remove the=20
duplicates from the array using the Array#uniq method:

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

The other possibility is to store the found tags in a hash or array. Someth=
ing=20
like:

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

I hope this helps

Stefano
 
C

Chris Gallagher

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

just added .uniq to tagList :0

Thanks,

Chris
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top