使用两个has_many:through关系满足特定条件的记录获取

3
假设我在我的Rails应用程序中有3个模型... Establishment,WasteType和EstablishmentWaste... 我的问题是,我想要 获取与某个废物类型相关联的所有机构。通常会使用 Establishment.where(waste_type_id: some_number) 进行操作,但问题是,Establishment拥有多个WasteType,反之亦然,并且关联是通过第三方进行的...
需要帮助吗?
下面是类和数据模型 enter image description here Establishment
class Establishment < ActiveRecord::Base
  # Include default devise modules.
  devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable, :omniauthable

    has_many :containers
    has_many :establishment_wastes
    has_many :waste_types, through: :establishment_wastes, :foreign_key => 'establishment_id'

  include DeviseTokenAuth::Concerns::User
end

废物类型

class WasteType < ActiveRecord::Base

    has_many :containers
    has_many :establishment_wastes
    has_many :establishments, through: :establishment_wastes, :foreign_key => 'waste_type_id'

end

建立浪费

class EstablishmentWaste < ActiveRecord::Base

    belongs_to :establishment, :foreign_key => 'establishment_id' 
    belongs_to :waste_type, :foreign_key => 'waste_type_id'

end

因此,数据模型将如下所示。
1个回答

2

EstablishmentWaste 是一个连接表,因此查询应该是这样的。

Establishment
 .joins(:establishment_wastes)
 .where('establishment_wastes.waste_type_id = ?', some_number)

小提示!您不需要分配:foreign_key => 'establishment_id',因为默认情况下Rails会将外键分配给model_id


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接