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.
F8b8738ed3dc472a597fd8fea63b1d52?d=identicon&s=25 Daan (Guest)
on 2006-04-06 12: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
36958dd94ca666a38483df282a5214d5?d=identicon&s=25 Peter Ertl (Guest)
on 2006-04-06 12:21
(Received via mailing list)
piece of cake for ruby :-)

owners = houses.map do |house| house.owner end
F8b8738ed3dc472a597fd8fea63b1d52?d=identicon&s=25 Daan (Guest)
on 2006-04-06 12:25
Peter Ertl 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?
085541f9546d0505433183b5f95bbf62?d=identicon&s=25 Ryan Bates (Guest)
on 2006-04-06 17: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
085541f9546d0505433183b5f95bbf62?d=identicon&s=25 Ryan Bates (Guest)
on 2006-04-06 18:38
(Received via mailing list)
On Apr 6, 2006, at 8:48 AM, Ryan Bates 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
Bacf41a24ed9a22d5da47747c1ebbac3?d=identicon&s=25 Daan (Guest)
on 2006-04-06 19:06
Thanks a lot!
9f0f89bbd9e1ecfbaab6584e429b7a2f?d=identicon&s=25 Josh Susser (jsusser)
on 2006-04-06 19: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 Susser
http://blog.hasmanythrough.com
This topic is locked and can not be replied to.