【问题标题】:Obtaining records where a certain condition is satisfied with two has_many :through通过两个 has_many 获取满足某个条件的记录
【发布时间】:2016-03-23 04:23:00
【问题描述】:

假设我的 Rails 应用中有 3 个模型...Establishment、WasteType 和 EstablishmentWaste...我的问题是我想获取与某种废物类型相关的所有机构。这通常会使用Establishment.where(waste_type_id: some_number) 来完成,问题是Establishment 有很多WasteType,反之亦然,并且关联是通过第三方进行的...

有什么帮助吗?

下面的类和数据模型

成立

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

所以数据模型应该是这样的

【问题讨论】:

    标签: ruby-on-rails associations has-many-through has-many


    【解决方案1】:

    EstablishmentWaste 在这种情况下是一个连接表,所以查询应该是。

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

    快速提示!您不需要分配:foreign_key =&gt; 'establishment_id',因为将外键分配给model_id 是默认的Rails 行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多