One of the more common confusions with ActiveRecord associations is the difference between the `has_one` and `belongs_to` relationships.
However, they are not interchangeable, and there are some serious differences. A `belongs_to` can only go in the class that holds the foreign key whereas `has_one` means that there is a foreign key in another table that references this class. So `has_one` can only go in a class that is referenced by a column in another table.
So this is wrong:
class Transaction < ActiveRecord::Base # The transactions table has a order_id has_one :order end class Order < ActiveRecord::Base # The orders table has a transaction_id has_one :transaction end
So is this:
class Transaction < ActiveRecord::Base # The transactions table has a order_id belongs_to :order end class Order < ActiveRecord::Base # The orders table has a transaction_id belongs_to :transaction end
For a two-way association, you need one of each, and they have to go in the right class. Even for a one-way association, it matters which one you use, and which direction you use it:
class Transaction < ActiveRecord::Base # This table has no foreign keys has_one :order end class Order < ActiveRecord::Base # The orders table has a transaction_id belongs_to :transaction end