A: 

Belongs_to is a strange name. Figure out your has_many relationships and just put belongs_to on the other side and don't worry about the semantics of it.

Chuck Vose
whoops - yeah didn't mean "belongs_to".So, I'm getting way too caught up in the meaning of the words in English, vs the meaning of the words in Rails.
normalocity
BTW, thank you!
normalocity
+3  A: 

Is HABTM the answer between the three classes?

No. You don't need HABTM in any of these relationships.

  • What's the proper relationship between users and questions?
  • What's the proper relationship between users and answers?

In both of these cases, it is a one-to-many relationship: A user has many questions and a user has many answers.

From a logical point of view, consider this: One question can never be authored by multiple users and one answer cannot be authored by multiple users. As such, it's not a many-to-many relationship.

In this case, your classes should be set up like this:

class User < ActiveRecord::Base
  has_many   :questions
  has_many   :answers
end

class Question < ActiveRecord::Base
  belongs_to :user
  has_many   :answers
end

class Answer < ActiveRecord::Base
  belongs_to :user
  belongs_to :question
end

If you, on the other hand, have a tagging system similar to StackOverflow, you'll need a HABTM relationship. One question can have many tags, while one tag can have many questions. As a prime example, your post has three tags (ruby-on-rails, habtm, foreign-key-relationship), while the ruby-on-rails tag presently have 8,546 questions.

vonconrad
Perfectly clear now. Thanks, both of you.
normalocity