我是Rails的初学者,并且ActiveRecords
关联有问题。
我正在创建简单的汽车租赁服务,并且建立了以下关联:
class Client < ActiveRecord::Base
has_many :rentals
has_many :bookings
has_many :cars, :through => :rentals
has_many :cars, :through => :bookings
end
class Rental < ActiveRecord::Base
belongs_to :client, dependent: :destroy
has_one :car
end
class Booking < ActiveRecord::Base
belongs_to :client, dependent: :destroy
has_one :car
end
我需要的是拥有一辆属于许多预订和租赁的汽车,而每次预订和租赁只能分配一辆汽车。
class Car < ActiveRecord::Base
# belongs_to_many :bookings
# belongs_to_many :rentals
end
我该怎么办?
最佳答案
如果一辆汽车可以有很多预订/租赁,但是预订/租赁只能有一辆汽车,那么您正在寻找经典的belongs_to
/ has_many
情况。看来您正被belongs_to
和has_one
的区别所绊倒-这不是语法上的问题,而是外键列在数据库中的位置问题。belongs_to
:“我恰好与其中之一相关,并且我具有外键。”has_one
:“我与其中之一完全相关,并且具有外键。”has_many
:“我与许多这样的人有关,并且它们具有外键。”
请注意,has_one
和has_many
都暗示另一个模型上有一个belongs_to
,因为这是“此”模型具有外键的唯一选项。还要注意,这意味着has_one
仅应在具有一对一关系而不是一对多关系时使用。
考虑到这一点,我将在您的租赁和预订模型中都将has_one :car
替换为belongs_to :car
,并将has_many :bookings
和has_many :rentals
放入您的Car模型中。还要确保您的rentals
和bookings
表具有car_id
列; cars
表中应该没有与租金或预订相关的列。
关于ruby-on-rails - Rails属于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182317/