Forum: Ruby on Rails all elements of an array

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Daan (Guest)
on 2006-04-06 14:18
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
Peter E. (Guest)
on 2006-04-06 14:21
(Received via mailing list)
piece of cake for ruby :-)

owners = houses.map do |house| house.owner end
Daan (Guest)
on 2006-04-06 14:25
Peter E. wrote:
> piece of cake for ruby :-)
>
> owners = houses.map do |house| house.owner end

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

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.. :)

You got a solution?
Ryan B. (Guest)
on 2006-04-06 19:49
(Received via mailing list)
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.. :)
>
> 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
Ryan B. (Guest)
on 2006-04-06 20:38
(Received via mailing list)
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
Daan (Guest)
on 2006-04-06 21:06
Thanks a lot!
Josh S. (Guest)
on 2006-04-06 21:18
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
This topic is locked and can not be replied to.