basic question about belongs_to

Hello,

I've got three tables:

site {
id
name,
customer_id
}

building {
id,
site_id,
name
}

equipment {
id,
building_id,
name
}

In my building model I have "belongs_to :site" and in my equipment
model I have "belongs_to :building".

How do I find all pieces of equipment that belong to a particular
customer?

I tried something like Equipment.find(:all, :include =>
[ :building, :site ], :conditions => 'customer_id = 1'), but of course
that doesn't work because there's nothing about :site in the equipment
model. I also tried to put ":include => :site" in the "belongs_to" in
the building model, but I got an error saying that the association
named ":site" wasn't found.

Any ideas?

Thanks!

Hello,

I've got three tables:

site {
id
name,
customer_id
}

building {
id,
site_id,
name
}

equipment {
id,
building_id,
name
}

Where's Customer?

In my building model I have "belongs_to :site" and in my equipment
model I have "belongs_to :building".

How do I find all pieces of equipment that belong to a particular
customer?

Do you also have:
class Site
   has_many :buildings
end
and so on?

I tried something like Equipment.find(:all, :include =>
[ :building, :site ], :conditions => 'customer_id = 1'), but of course
that doesn't work because there's nothing about :site in the equipment
model. I also tried to put ":include => :site" in the "belongs_to" in
the building model, but I got an error saying that the association
named ":site" wasn't found.

Any ideas?

Thanks!

Your table names should be plural (e.g., 'sites' and 'buildings') unless you have overridden this with set_table_name in your model.

You can also try:

Equipment.find(:all, :include => { :building => :site },
                :conditions => [ 'site.customer_id = ?', some_customer ])

but even if that works as-is, you should consider the other parts (adding "has_many" associations to mirror your "belongs_to"; having a customer model and table; pluralizing your tables) as means to avoid future aggravation.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

Where's Customer?

I tried to shorten my question, that's why I didn't show all the
relevant relationships. I do have the customer model.

Your table names should be plural (e.g., 'sites' and 'buildings')

They are. They aren't in the example though. Good catch :slight_smile:

Equipment.find(:all, :include => { :building => :site }

This worked like a charm. I need to read about that variation
of :include. Cool!

(adding "has_many" associations to mirror your "belongs_to"; having a

Well, so far I haven't needed to reverse. Is that a no-no not to
mirror it?

Thanks Rob. You saved me a lot of searching. Much appreciate.

Well, so far I haven't needed to reverse. Is that a no-no not to

I meant to say "I haven't needed the reverse relationship"