difference between belongs_to and references keyword?

First, I am very new to ruby and rails. Searching for "references" is
really tough, and so I've finally come here.

I'm trying to create a scaffold. Let's say a Business and a School both
can have a single Address (not shared). In a different case, an Offer
has an OfferType (with just a type_id and description). Also, a
Business can have many Offers.

(I've stripped off most of the unrelated columns, like last_name,
etc...)

I'm wondering (in about this order):

a) Am I doing this right?

b) What the difference would be if I used Address business:belongs_to
user:belongs_to instead of references?

c) Is the Business address:has_one redundant with Address
business:references? If not, what does it do? What about the has_many?

d) Will this generate join tables for me? And I don't need to specify
xxxxx_id's anywhere in these relationships?

./script/generate scaffold Business address:has_one offer:has_many
name:string first_name:string

./script/generate scaffold School address:has_one name:string

./script/generate scaffold Address business:references school:references
address1:string

./script/generate scaffold Offer business:references offerType:has_one
start_date:datetime

./script/generate scaffold OfferType image:has_one name:string
description:text

(I'm on Ruby 1.8.7 and Rails 2.3.8.)

Thanks!

Kevin Hastie wrote:

a) Am I doing this right?

Apparently not.

Weird. Is it because I didn't do polymorphic anywhere that Address now
has a business_id, a credit_card_id and a user_id? Obviously this is no
good - I'd prefer the Business table to have an address_id, etc.... So:

e) Did I do this backwards? Should it be Business address:references (or
address:belongs_to?) and Address business:has_one?

f) Or should I just drop the :references from Addresses and go from
there?

g) Is using :references (which I don't see in many docs/tutorials) just
going to get me in trouble as a beginner?

Thanks again!

Kevin Hastie wrote:

I guess what I really want is something like this:

class Address< ActiveRecord::Base
  belongs_to :addressable, :polymorphic => true
end

class Business< ActiveRecord::Base
has_one :address, :as => :addressable
end

class School < ActiveRecord::Base
has_one :address, :as => :addressable
end

h) I don't suppose there is a way to do that with the scaffold. Is
there a typical set of scaffold options that would map to this?

i) Lastly, I guess I am better off avoiding polymorphism at the
beginning, huh? I should just be doing a simple mapping...

I've written a short example about has_many, belongs_to -
http://gist.github.com/425026

has_many, has_one, belongs_to deffinitions goes into model and not in
scaffold. You can use "references" like this: script/generate scaffold
address company:references address:text

but as I mentioned in this discussion http://railsforum.com/viewtopic.php?id=39325
(look for andain's posts) I'm running into problems where views are
generated without appended _id. Maybe I'm just doing something wrong
or just not getting it right ...

Anyway I hope i shed some light on your problem.

Correction to my previuos message: you can use "belongs_to" and
"references" as column types in scaffold (and migrations). They do
same thing: add belongs_to association to model.

Kevin Hastie wrote:

Kevin Hastie wrote:

I guess what I really want is something like this:

class Address< ActiveRecord::Base
  belongs_to :addressable, :polymorphic => true
end

class Business< ActiveRecord::Base
has_one :address, :as => :addressable
end

class School < ActiveRecord::Base
has_one :address, :as => :addressable
end

h) I don't suppose there is a way to do that with the scaffold. Is
there a typical set of scaffold options that would map to this?

i) Lastly, I guess I am better off avoiding polymorphism at the
beginning, huh? I should just be doing a simple mapping...

What about the polymorphic example I gave? It seems like this is the
best practice approach, but I am finding it VERY hard to find examples
that I can get to work, and I feel like I see lots of complaints that
the feature is "broken" within Rails.

Is it only for has_many relationships or can it be used like I am trying
with has_one relationships? Is my example the correct way to go about
it? If so, what else needs to happen?

(and what about questions h and i?)

j) What seems much easier is to have the Business and School tables to
each have an address_id, and be done with it. That's what I would have
done days ago were I programming a language without so many "handy"
shortcuts. But to do so, doesn't it have to be

Address
has_one :business
has_one :school

Business
belongs_to :address

That doesn't seem right..?

i am interested in the answer to this as well.

please post if you find out.

Kevin Hastie wrote:
[...]

j) What seems much easier is to have the Business and School tables to
each have an address_id, and be done with it.

That's correct.

That's what I would have
done days ago were I programming a language without so many "handy"
shortcuts. But to do so, doesn't it have to be

Address
has_one :business
has_one :school

Business
belongs_to :address

That doesn't seem right..?

That's only right if you want an address to treat associated businesses
and schools differently. If you just want an address to have_one (or
more likely many) associated generic entities, then you need
polymorphism.

Best,