- एडिट -रेल के ऑर्डर परिणाम एक ही तालिका में एकाधिक जुड़ने के साथ
मैं इस प्रश्न को सरल बनाना चाहता था। इस मॉडल संरचना के साथ:
has_one :pickup_job, class_name: 'Job', source: :job
has_one :dropoff_job, class_name: 'Job', source: :job
मुझे क्या करना चाहते हैं: मान्य नहीं जाहिर
Package.joins(:dropoff_job, :pickup_job).order(pickup_job: {name: :desc})
यह है, वास्तविक वाक्य रचना कि इस्तेमाल किया जाना चाहिए है:
.order('jobs.name desc')
हालांकि जिस तरह से रेल टेबल में शामिल हो जाते हैं, इसका मतलब है कि मैं यह सुनिश्चित नहीं कर सकता कि तालिका उपनाम का नाम क्या होगा (यदि कुछ भी हो), और यहके बजाय dropoff_job.name
द्वारा ऑर्डर करेगा
irb(main):005:0> Package.joins(:dropoff_job, :pickup_job).order('jobs.name desc').to_sql
=> "SELECT \"packages\".* FROM \"packages\" INNER JOIN \"jobs\" ON \"jobs\".\"id\" = \"packages\".\"dropoff_job_id\" INNER JOIN \"jobs\" \"pickup_jobs_packages\" ON \"pickup_jobs_packages\".\"id\" = \"packages\".\"pickup_job_id\" ORDER BY jobs.name desc"
इसके अलावा, मैं कैसे टेबल शामिल हो गए हैं के नियंत्रण में नहीं कर रहा हूँ, तो मैं मेज उर्फ परिभाषित नहीं कर सकते हैं।
--UPDATE--
मैं कुछ इस तरह का उपयोग कर वर्तमान क्षेत्र से अन्य नाम नाम निकालने के लिए कोशिश कर रहा है के साथ एक खेल पड़ा है:
current_scope.join_sources.select { |j| j.left.table_name == 'locations' }
लेकिन फिर भी एक छोटे से अटक कर रहा हूँ और वास्तव में महसूस हो रहा है जैसे कि एक बहुत आसान समाधान होना चाहिए।
--UPDATE--
पैन का जवाब कुछ परिस्थितियों में काम करता है, लेकिन मैं एक समाधान है कि थोड़ा अधिक गतिशील रहा हूँ।
इसके साथ समस्या यह है कि मैं खुद को शामिल नहीं कर रहा हूं। मैं फिल्टररफिश नामक एक मणि का उपयोग कर रहा हूं। मुझे लगता है कि 'current_scope' से उपनाम नाम प्राप्त करने का कोई तरीका होना चाहिए? – Rick
मैंने आपको बक्षीस दिया है क्योंकि आपका उत्तर मेरे बाद के करीब है लेकिन यह किसी भी तरह का आदर्श समाधान नहीं है जिसे मैं ढूंढ रहा था। – Rick