在我正在构建的 rails 3 应用程序中,我有这三个类:
class Instrument < ActiveRecord::Base
has_many :parts
has_many :pieces, through: :parts
end
class Part < ActiveRecord::Base
belongs_to :instrument
belongs_to :piece
end
class Piece < ActiveRecord::Base
has_many :parts
has_many :instruments, through: :parts
end
我正在寻找一种方法来选择所有相关乐器是任意一组乐器的子集的片段。
为避免混淆,我将举一个例子:
- Piece(id:1) with instruments: [1,2,3],
- Piece(id:2) 与 [1,2,3,4]
- Piece(id:3) 与 [1,3,4]
- 带有 [2] 的片段(id:4),
somequery(1,2,3,4)
应该产生所有四个部分,somequery(1,2,3)
只有 1 和 4,somequery(1,3,4)
只有 3 和somequery(2)
只有 4。
我正在使用rails 3.2,rails中的解决方案会很棒,但sql也很好,最好是postgres,但如果有一个mysql特定的解决方案也可以。此外,我没有使用相对较小的数据库(1000 多件、50 件仪器和 15.000 个零件),它没有被大量查询,所以如果查询在效率上不是最佳的,那也没问题。
作为最后的免责声明,我知道我在 ruby/rails 中的方法,但在 SQL 中相当绿色。
谢谢您的帮助!