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/.