class A < ActiveRecord::Base
has_many :bs
end
class B < ActiveRecord::Base
belongs_to :a
end
A 表
id | name |
---|---|
1 | 哈哈_1 |
2 | 哈哈_2 |
3 | 哈哈_3 |
4 | 哈哈_4 |
5 | 哈哈_5 |
B 表
id | a_id | column_1 | column_2 |
---|---|---|---|
1 | 2 | a | 100 |
2 | 2 | b | 101 |
3 | 3 | a | 102 |
4 | 3 | b | 101 |
5 | 4 | a | 100 |
6 | 4 | b | 102 |
想找出 B 中
如果column_1
为a
,那么column_2
为100
;
同时
如果column_1
为b
,那么column_2
为101
所有对应的 A
目前想到的解决方式:
A join 两次 B 表
A.joins("INNER JOIN B B_1 ON B_1.a_id = as.id").joins("INNER JOIN B B_2 ON B_2.a_id = as.id").where("(B_1.column_1 = a AND B_1.column_2 = 100) AND (B_2.column_1 = b AND B_2.column_2 = 101)")
如果这样,条件变成 100 个,那不是得 join 100 次