gpt4 book ai didi

sql - Rails has_one 和 belongs_to 加入

转载 作者:太空宇宙 更新时间:2023-11-03 17:33:37 24 4
gpt4 key购买 nike

在我的应用程序中,我有模型:汽车:

class Car < ActiveRecord::Base
has_one :brand, through: :car_configuration
has_one :model, through: :car_configuration
has_one :body_style, through: :car_configuration
has_one :car_class, through: :car_configuration

belongs_to :car_configuration
end

汽车配置:

class CarConfiguration < ActiveRecord::Base
belongs_to :model, class_name: 'CarModel'
belongs_to :body_style, class_name: 'CarBodyStyle'
belongs_to :car_class
has_one :brand, through: :model
has_many :cars, dependent: :destroy
has_many :colors, dependent: :destroy
def brand_id
brand.try(:id)
end
end

和 CarBrand:

class CarBrand < ActiveRecord::Base
default_scope { order(name: :asc) }
validates :name, presence: true

has_many :models, class_name: 'CarModel', foreign_key: 'brand_id'

end

现在我想获取 CarConfiguration 品牌 ID 为 1 的所有汽车。我试过这样的东西,但这不起作用:

  joins(:car_configuration).where(car_configurations: {brand_id: 1})

在此先感谢您的帮助。

最佳答案

协会

我不认为你可以拥有 belongs_to :through 关联 ( belongs_to through associations ),此外,你的模型在我看来真的很臃肿

我会考虑使用 has_many :through association :

#app/models/brand.rb
Class Brand < ActiveRecord::Base
has_many :cars
end

#app/models/car.rb
Class Car < ActiveRecord::Base
#fields id | brand_id | name | other | car | attributes | created_at | updated_at
belongs_to :brand

has_many :configurations
has_many :models, through: :configurations
has_many :colors, through: :configurations
has_many :body_styles, through: :configurations
end

#app/models/configuration.rb
Class Configuration < ActiveRecord::Base
#id | car_id | body_style_id | model_id | detailed | configurations | created_at | updated_at
belongs_to :car
belongs_to :body_style
belongs_to :model
end

#app/models/body_style.rb
Class BodyStyle < ActiveRecord::Base
#fields id | body | style | options | created_at | updated_at
has_many :configurations
has_many :cars, through: :configurations
end

etc

这将允许您执行以下操作:

@car = Car.find 1
@car.colours.each do |colour|
= colour
end

面向对象

其他需要考虑的是 object-orientated Ruby(和 Rails)的本质。

面向对象编程不仅仅是一个花哨的流行语 - 它是您应用程序的核心基础设施元素,因此,您需要考虑围绕对象构建您的模型等:

enter image description here

这意味着当您创建模型来调用 Car 对象等时,您需要理解您创建的 association 应该直接补充特定的对象

您的协会目前不这样做 - 它们非常随意且构造错误。我建议检查您希望填充/创建哪些对象,然后围绕它们创建您的应用程序

关于sql - Rails has_one 和 belongs_to 加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25200000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com