如果我有这样的表:
class User < ActiveRecord::Base
has_many :cars, through: :user_cars
end
class UserCar < ActiveRecord::Base
belongs_to :user
belongs_to :car
validates_uniqueness_of :car, scope: :user
end
class Car < ActiveRecord::Base
has_one :user_car, dependent: :destroy
has_one :user, through: :user_cars
end
每个用户都可以拥有一辆汽车,而汽车只能属于一个用户。
我希望能够检索属于该用户的所有汽车,但user.cars
不起作用。
我缺少什么?关系是否正确设置?
答案 0 :(得分:0)
错误实际上是typo
问题。
has_one :user, through: :user_cars
应该是:
has_one :user, through: :user_car
s
关联
through
答案 1 :(得分:0)
您必须先拥有常规关联才能拥有though
关联。因此,您的User
模型应如下所示:
class User < ActiveRecord::Base
has_many :user_cars
has_many :cars, through: :user_cars
end
这是因为当您说through: :somethings
时,ActiveRecord正在寻找一个称为somethings
的现有关联来传递。指定through
时,将为其指定关联的名称,而不是模型或表的名称。
为证明这一点,您可以将user_cars
的关联名称更改为belongings
:
class User < ActiveRecord::Base
has_many :belongings, class_name: 'UserCar'
has_many :cars, through: :belongings
end
我们的关联模型(UserCar)和表名称(user_cars)保持不变,但是由于我们更改了关联名称,因此必须更改through
值的名称以匹配。
我知道我参加晚会很晚,但是我认为这对其他参加者会有所帮助。