All elements of an array


#1

Hi there,

i have a model house and a model owner

A house can have many owners.

Now i want to find all owners of a specific street and i want to list
them

So i do:

houses = House.find(:all, :conditions => ‘street LIKE “%foo%”’)

So now i got an array of all houses in that street

@owners = houses[0].owner i’ve got all the owners of the first house.
but i want from all houses so something like this:

@owners = houses[:all].owner

Does anyone know how to do this?

Thanks in advance


#2

piece of cake for ruby :slight_smile:

owners = houses.map do |house| house.owner end


#3

Peter E. wrote:

piece of cake for ruby :slight_smile:

owners = houses.map do |house| house.owner end

Thnx for the reply. I forgot something to tell :slight_smile:

i use

@owners = houses[0].owner.find(:all, :conditions => ‘age > 30’, :limit
=> 100)

i guess in your way i could do:

owners = houses.map do |house| house.owner.find(:all, :conditions =>
‘age > 30’, :limit => 100) end

but then the limit will not work. And in the end i want to use paginate
as well… :slight_smile:

You got a solution?


#4

On Apr 6, 2006, at 3:25 AM, Daan wrote:

but then the limit will not work. And in the end i want to use
paginate
as well… :slight_smile:

You got a solution?

Something like this should work:

owners = Owner.find(:all, :include => :house, :conditions =>
‘houses.street LIKE ‘%foo%’ AND owners.age > 30’, :limit => 100)

Hope that helps.

Ryan


#5

On Apr 6, 2006, at 8:48 AM, Ryan B. wrote:

owners = Owner.find(:all, :include => :house, :conditions =>
‘houses.street LIKE ‘%foo%’ AND owners.age > 30’, :limit => 100)

Sorry, forgot to use double quotes. That should be:
owners = Owner.find(:all, :include => :house, :conditions =>
“houses.street LIKE ‘%foo%’ AND owners.age > 30”, :limit => 100)

And remember to sanitize any user input (for example, if “foo” or
“30” came from params).

Ryan


#6

Thanks a lot!


#7

Daan wrote:

Hi there,

i have a model house and a model owner

A house can have many owners.

Now i want to find all owners of a specific street and i want to list them

You can use a has_many :through to avoid all that mucking about with
conditions:

class Street < ActiveRecord::Base
has_many :houses
has_many :owners, :through => :houses
end

all_owners = a_street.owners


Josh S.
http://blog.hasmanythrough.com