Hey all,
I''m learning AR and I''m trying to find the best way to search
an
ActiveRecord set in order to make a conditional statement decision,
something like .has_value?(value) but for a multi-dimensional array like
an AR set of like 100 rows.
I know I can do something like this:
results = Table.find_by_sql("...")
for result in results
if result.has_value?("value")
do something...
end
end
But I''d rather not iterate through every row of results to find out. I
think I read somewhere about being able to use the .find method to
search AR hashes? Something like: results.find(...) but I''m not able
to
find more info on that.
I want to be able to have a conditional statement and only have it run
if there is an attribute somewhere in the AR set that matches a given
value. Thanks for any help and suggestions in advance.
--
Posted via http://www.ruby-forum.com/.
results is just a Ruby array of AR objects. Have a look at what you can do with arrays in Ruby: http://www.ruby-doc.org/core/classes/Array.html Methods like select, reject, collect, delete_if may be useful for you. What exactly are you trying to achieve.... more specifics would be useful. -Jonathan. On 6/21/06, Marston A. <marston@marstononline.com> wrote:> Hey all, > > I''m learning AR and I''m trying to find the best way to search an > ActiveRecord set in order to make a conditional statement decision, > something like .has_value?(value) but for a multi-dimensional array like > an AR set of like 100 rows. > > I know I can do something like this: > > results = Table.find_by_sql("...") > > for result in results > if result.has_value?("value") > do something... > end > end > > But I''d rather not iterate through every row of results to find out. I > think I read somewhere about being able to use the .find method to > search AR hashes? Something like: results.find(...) but I''m not able to > find more info on that. > > I want to be able to have a conditional statement and only have it run > if there is an attribute somewhere in the AR set that matches a given > value. Thanks for any help and suggestions in advance. > > > > > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
Yes,
Basically I want an easy way to search the AR set for a condition and do
something if that condition is met, ANYWHERE in the AR result set.
But it seems methods like .has_value?, .has_key?, .include? etc are
specific for single arrays and hashes and not a multi-dimensional
array/hash such as an AR result set.
There might be a simple method I''m over looking though, but I guess
thats what I''m looking for :-)
So from my previous examples:
results = Table.find_by_sql("...")
for result in results
if result.has_value?("value")
do something...
end
end
Instead I''d like to do something like this to save resources and not
start an iteration into the for loop at all unless the condition is met:
results = Table.find_by_sql("...")
if results.has_value?("value")
do something...
end
Though as I mentioned above, .has_value? doesn''t seem to work on AR
result sets, so I''m looking for something that does and works similarly
Hope that made some sense. Thanks
--
Posted via http://www.ruby-forum.com/.
Have a look at any?
http://www.ruby-doc.org/core/classes/Enumerable.html#M003125
if results.any? { |r| ... }
# do something
end
You''ll always have to iterate over results. There''s no other
way to
look at all the values ...
-Jonathan.
On 6/21/06, Marston A. <marston@marstononline.com>
wrote:> Yes,
>
> Basically I want an easy way to search the AR set for a condition and do
> something if that condition is met, ANYWHERE in the AR result set.
>
> But it seems methods like .has_value?, .has_key?, .include? etc are
> specific for single arrays and hashes and not a multi-dimensional
> array/hash such as an AR result set.
>
> There might be a simple method I''m over looking though, but I
guess
> thats what I''m looking for :-)
>
> So from my previous examples:
>
> results = Table.find_by_sql("...")
>
> for result in results
> if result.has_value?("value")
> do something...
> end
> end
>
>
> Instead I''d like to do something like this to save resources and
not
> start an iteration into the for loop at all unless the condition is met:
>
> results = Table.find_by_sql("...")
>
> if results.has_value?("value")
> do something...
> end
>
> Though as I mentioned above, .has_value? doesn''t seem to work on
AR
> result sets, so I''m looking for something that does and works
similarly
> Hope that made some sense. Thanks
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Rails mailing list
> Rails@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails
>
Jonathan, Great, thanks alot. I think thats what I''m looking for and the tip about you just having to iterate over results. Thanks. Jonathan Viney wrote:> Have a look at any? > > http://www.ruby-doc.org/core/classes/Enumerable.html#M003125 > > if results.any? { |r| ... } > # do something > end > > You''ll always have to iterate over results. There''s no other way to > look at all the values ... > > -Jonathan.-- Posted via http://www.ruby-forum.com/.