मेरे पास दो ActiveRecord
मॉडल हैं जिनमें एचएबीटीएम एसोसिएशन है।एक habtm एसोसिएशन की द्वीप तालिका कैसे प्राप्त करें?
मैं एरल का उपयोग करके अनाथ रिकॉर्ड प्राप्त करने के लिए scope
लिखना चाहता हूं।
मेरी समस्या यह है कि मुझे एसोसिएशन के arel_table
को पुनर्प्राप्त करने का कोई तरीका नहीं मिला। चूंकि संबंध एचएबीटीएम है, इसलिए arel_table
पर कॉल करने के लिए कोई मॉडल नहीं है।
मेरे पास अब निम्नलिखित है (जो काम करता है), लेकिन मैं जॉइन टेबल के नाम के साथ एक नई आईएलएल टेबल बनाता हूं (reflect_on_association
विधि का उपयोग कर पुनर्प्राप्त)।
SELECT `teachers`.*
FROM `teachers`
WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id`
FROM `groups_teachers`))
तो वहाँ arel_table
को पुनः प्राप्त करने के बजाय एक नया एक बनाने किसी भी बेहतर तरीका है:
scope :orphans, lambda {
teachers = arel_table
join_table = Arel::Table.new(reflect_on_association(:groups).options[:join_table])
join_table_condition = join_table.project(join_table[:teacher_id])
where(teachers[:id].not_in(join_table_condition))
}
यह निम्नलिखित एसक्यूएल उत्पादन होता है?
नोट, मुझे लगता है कि ऐसा करने के लिए एक क्लीनर तरीका है, नीचे मेरा जवाब देखें। – Andrew