我想以rails方式写这个查询。
my_param是范围
的变量select A.id, A.name, B.id
from table1 A
join table1_table2 AB on A.id = AB.table1_id
join table2 B on B.id = AB.table2_id
where my_param in (select AB2.table2_id
from table1_table2 AB2
where AB2.table1_id = A.id)
我试过这种方式(我已经加入并且在范围内需要where子句):
scope :by_my_param, ->(my_param) { where my_param => Table1Table2.select(:table2_id).where(table1_id: ...) if my_param.present? }
但我不知道如何引用当前id(A.id)
范围在表1中。
编辑: 我有通过关联has_many和控制器我用这种方式使用范围:
Table1.includes(:table2s).by_my_param(param[:my_param])
答案 0 :(得分:0)
您应该使用包含进行热切加载关联: http://guides.rubyonrails.org/active_record_querying.html#eager-loading-multiple-associations
您需要做类似的事情:
table1.includes(:table1_table2).where( my_param: table1_table2: { table1_id: ... } )