This question is quite simple but I have run into the problem a few times.
Let's say you do something like:
cars = Vehicle.find_by_num_wheels(4)
cars.each do |c|
puts "#{c.inspect}"
end
This works fine if cars is an array but fails if there is only one car in the database. Obviously I could do something like "if !cars.length.nil?" or check some other way if the cars object is an array before calling .each, but that is a bit annoying to do every time.
Is there something similar to .each that handles this check for you? Or is there an easy way to force the query result into an array regardless of the size?
If you always want all of the cars, you should use find_all
instead:
cars = Vehicle.find_all_by_num_wheels(4)
You could also turn a single Vehicle
into an array with:
cars = [cars] unless cars.respond_to?(:each)
You might be looking for
cars = Vehicle.find_all_by_num_wheels(4)
The dynamic find_by_
methods only return one element and you have to use find_all_by_
to return multiple.
Named scoped version for your problem
Vehicle.scoped(:conditions => { :num_wheels => 4 } ).each { |car| car.inspect }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With