Это место, где находится внешний ключ.
class Foo < AR:Base
end
- Если foo
belongs_to :bar
, то в таблице foos есть столбец bar_id
- Если foo
has_one :bar
, тогда таблица баров имеет столбец foo_id
На концептуальном уровне, если ваш class A
имеет отношение has_one
с class B
, тогда class A
является родителем class B
следовательно, у вашего class B
будет belongs_to
отношение с class A
, поскольку оно является потомком class A
.
Оба выражают отношение 1-1.Разница главным образом в том, где разместить внешний ключ, который идет на стол для класса, объявляющего отношение belongs_to
.
class User < ActiveRecord::Base
# I reference an account.
belongs_to :account
end
class Account < ActiveRecord::Base
# One user references me.
has_one :user
end
Таблицы для этих классов могут выглядеть примерно так:
CREATE TABLE users (
id int(11) NOT NULL auto_increment,
account_id int(11) default NULL,
name varchar default NULL,
PRIMARY KEY (id)
)
CREATE TABLE accounts (
id int(11) NOT NULL auto_increment,
name varchar default NULL,
PRIMARY KEY (id)
)