Delete Item In Array If Conditions Met

Hi all: Ruby newbie here. Been trying to get this code to work but am
having a tough time of it. Can anyone else please help me out?

I’ve read from a db into an array, and would like to go through the
array and remove elements which match a specific criteria. Here is the
code that I’m using:

load array

@array = Capture.find(:all)

iterate through array

for x in @array
x.reject!{|x| x.text =~ “something”}
end

Chris K. wrote:

Hi all: Ruby newbie here. Been trying to get this code to work but am
having a tough time of it. Can anyone else please help me out?

I’ve read from a db into an array, and would like to go through the
array and remove elements which match a specific criteria. Here is the
code that I’m using:

load array

@array = Capture.find(:all)

iterate through array

for x in @array
x.reject!{|x| x.text =~ “something”}
end

Sorry: forgot to mention that this breaks with an undefined method
reject!

Thanks in advance!

Chris K. wrote:

Hi all: Ruby newbie here. Been trying to get this code to work but am
having a tough time of it. Can anyone else please help me out?

I’ve read from a db into an array, and would like to go through the
array and remove elements which match a specific criteria. Here is the
code that I’m using:

load array

@array = Capture.find(:all)

iterate through array

for x in @array
x.reject!{|x| x.text =~ “something”}
end

reject! does the iterating for you, so you can (must) leave out the for
loop.

hth,

Siep

The #reject! method is an iterator; so is the for loop (effectively).
So you’re iterating over the array, and then trying to iterate over
individual members of the array. Here’s what you want:

@array = Capture.find(:all)
@array.reject! { |item| item.text =~ ‘something’ }

Mat B. wrote:

The #reject! method is an iterator; so is the for loop (effectively).
So you’re iterating over the array, and then trying to iterate over
individual members of the array. Here’s what you want:

@array = Capture.find(:all)
@array.reject! { |item| item.text =~ ‘something’ }

Thanks guys that did it!

In addition to reject! there’s also Array#delete_if

Chris K. wrote:

Mat B. wrote:

The #reject! method is an iterator; so is the for loop (effectively).
So you’re iterating over the array, and then trying to iterate over
individual members of the array. Here’s what you want:

@array = Capture.find(:all)
@array.reject! { |item| item.text =~ ‘something’ }

Thanks guys that did it!

You’ve better ask your question in the Rails forum. You’re using some
ORM (e.g. AcriveRecord, DataMapper, etc.) and need to ask the people who
use it.

Instead of loading all the objects from the database it’s more efficient
to pass find() the criterion.