ruby-on-rails - Rails属于

标签 ruby-on-rails activerecord associations

我是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_tohas_one的区别所绊倒-这不是语法上的问题,而是外键列在数据库中的位置问题。


belongs_to:“我恰好与其中之一相关,并且我具有外键。”
has_one:“我与其中之一完全相关,并且具有外键。”
has_many:“我与许多这样的人有关,并且它们具有外键。”


请注意,has_onehas_many都暗示另一个模型上有一个belongs_to,因为这是“此”模型具有外键的唯一选项。还要注意,这意味着has_one仅应在具有一对一关系而不是一对多关系时使用。

考虑到这一点,我将在您的租赁和预订模型中都将has_one :car替换为belongs_to :car,并将has_many :bookingshas_many :rentals放入您的Car模型中。还要确保您的rentalsbookings表具有car_id列; cars表中应该没有与租金或预订相关的列。

关于ruby-on-rails - Rails属于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182317/

相关文章:

r - R中的Apriori算法,不是否定规则

mysql - Rails 和 Kaminari 分页,每页具有一定的优先级

ruby-on-rails - postgresql 中的“Where-in”查询显示相同结果的两个不同查询

ruby-on-rails - ArticlesController 中的 Rails ActiveRecord::InvalidForeignKey#destroy

ruby-on-rails - Arel AND 子句和 Empty 条件

ruby-on-rails - 对 Rails 中的嵌套资源和身份验证感到困惑

sql - 使用聚合函数来缩小查询范围

ruby-on-rails - ActiveStorage 生成附件 url

ruby-on-rails - created_at 和 updated_at 列来自哪里?

c# - 我应该如何为多对多关系设计类?