gpt4 book ai didi

ruby-on-rails - Rails ActiveRecord 与 has_many 关联相交查询

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:23 26 4
gpt4 key购买 nike

我有以下模型:

class Piece < ActiveRecord::Base
has_many :instrument_pieces
has_many :instruments, through: :instrument_pieces
end

class Instrument < ActiveRecord::Base
has_many :pieces, through: :instrument_pieces
has_many :instrument_pieces
end

class InstrumentPiece < ActiveRecord::Base
belongs_to :instrument
belongs_to :piece
end

我有以下查询:

Piece
.joins(:instrument_pieces)
.where(instrument_pieces: { instrument_id: search_params[:instruments] } )
.find_each(batch_size: 20) do |p|

其中 search_params[:instruments] 是一个数组。此查询的问题在于它将检索所有具有任何乐器的片段,因此如果 search_params[:instruments] = ["1","3"],查询将返回片段1 或 3 或两者的仪器协会。我希望查询只返回乐器关联包括乐器 1 和 3 的片段。我已经通读了文档,但我仍然不确定如何做到这一点......

最佳答案

看起来我想要的是两个查询之间的交集,所以我最终做的是:

queries = []
query = Piece.joins(:instruments)
search_params[:instruments].each do |instrument|
queries << query.where(instruments: {id: instrument})
end
sql_str = ""
queries.each_with_index do |query, i|
sql_str += "#{query.to_sql}"
sql_str += " INTERSECT " if i != queries.length - 1
end

Piece.find_by_sql(sql_str).each do |p|

非常丑陋,但 ActiveRecord 还不支持 INTERSECT。我想是时候等待 ActiveRecord 5 了。

关于ruby-on-rails - Rails ActiveRecord 与 has_many 关联相交查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33557338/

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