Tag
モデルとのHABTM関連のUser
モデルがあります。必ずしも1つではなく、すべての条件を必ず持っているすべてusers
が必要です。Railsクエリの関連性AND
例:ID 2および/または3でtags
を持っていますが、私は私が考えることができるIDS 2と3
Tag
モデルとのHABTM関連のUser
モデルがあります。必ずしも1つではなく、すべての条件を必ず持っているすべてusers
が必要です。Railsクエリの関連性AND
例:ID 2および/または3でtags
を持っていますが、私は私が考えることができるIDS 2と3
とtags
を持っているusers
を返したい
User.includes(:tags).where(tags: { id: [2,3,...] })
戻りusers
User.includes(:tags).where(tags: { id: 2 }).where(tags: { id: 3 })
あなたがseverals tag_ids
を持っている場合は、ユーザーとtとの間に中間テーブルの場合:このオプションのあなたがincludes
を引き続き使用したい場合はAGSはuser_tags
tag_ids = [1, 2, 3, 4, 5]
where = tag_ids.map do |id|
"tags.id = #{id}"
end.join(" AND ")
puts where # "tags.id = 1 AND tags.id = 2 AND tags.id = 3 AND tags.id = 4 AND tags.id = 5"
User.joins("INNER JOIN user_tags ON user_tags.user_id = user.id INNER JOIN tags ON tags.id = user_tags.tag_id").where(where)
で、レールっぽい方法でどこを継続して使用する他に選択肢はありません。
方法について:
user_ids = Tag.where(id: [2,3]).pluck(:user_id).uniq
User.where(id: user_id)
pluck
、これは理想的ではないかもしれないが、それは少なくともかなりの速さが必要となりますので、すべてのタグオブジェクトをインスタンス化しません。
タグオブジェクトがインスタンス化されていないにもかかわらず、これの欠点は1つではなく2つのクエリを実行していることです。 – MatayoshiMariano
'tags.id'が100個の場合はどうなりますか? –
どちらが中間テーブルですか? – MatayoshiMariano
@ m.simonborg 100 'tags.id'sに関する質問を更新しました – MatayoshiMariano