आप दोनों तालिकाओं के लिए एक ही क्वेरी के लिए प्रत्यक्ष SQL कर सकते हैं। मैं आशा करता हूं कि लोगों को सीधे स्ट्रिंग (स्वयं इंजेक्शन इंजेक्शन) में वेरिएबल डालने से एक पवित्र क्वेरी उदाहरण प्रदान करेगा, हालांकि यह उदाहरण इसके लिए आवश्यकता को निर्दिष्ट नहीं करता है:
@results = []
ActiveRecord::Base.connection.select_all(
ActiveRecord::Base.send(:sanitize_sql_array,
["... your SQL query goes here and ?, ?, ? are replaced...;", a, b, c])
).each do |record|
# instead of an array of hashes, you could put in a custom object with attributes
@results << {col_a_name: record["col_a_name"], col_b_name: record["col_b_name"], ...}
end
संपादित करें : जैसा कि हुआ ने कहा, एक सरल तरीका है ActiveRecord::Base.connection.execute("...")
। दूसरा तरीका है ActiveRecord::Base.connection.exec_query('...').rows
। और आप मूल तैयार किए गए कथनों का उपयोग कर सकते हैं, उदाहरण के लिए यदि पोस्टग्रेज का उपयोग करते हुए, तैयार कथन raw_connection, तैयार, और exec_prepared के साथ किया जा सकता है जैसा कि https://stackoverflow.com/a/13806512/178651 में वर्णित है।
आप ActiveRecord संबंधपरक प्रश्नों में कच्चे SQL अंश भी डाल सकते हैं: http://guides.rubyonrails.org/active_record_querying.html
और संघों, स्कोप्स आदि में, आप संभवतः ActiveRecord संबंधपरक प्रश्नों के लिए एक ही SQL का निर्माण कर सकते हैं और ठंडी चीजों के साथ कर सकते हैं। एर्ल ने एर्नी के रूप में http://erniemiller.org/2010/03/28/advanced-activerecord-3-queries-with-arel/ में उल्लेख किया है । और, बेशक, अन्य ओआरएम, रत्न आदि हैं।
यदि यह बहुत उपयोग किया जा रहा है और सूचकांक जोड़ने से अन्य प्रदर्शन / संसाधन समस्याएँ पैदा नहीं होंगी, तो भुगतान_details.created_at के लिए DB में एक सूचकांक जोड़ने पर विचार करें और payment_errors.created_at के लिए।
यदि बहुत सारे रिकॉर्ड और सभी रिकॉर्ड एक साथ दिखाने की आवश्यकता नहीं है, तो पृष्ठांकन का उपयोग करने पर विचार करें:
यदि आपको पृष्ठांकित करने की आवश्यकता है, तो पहले DB_ में एक दृश्य बनाने के बारे में विचार करें, जिसे payment_records कहा जाता है, जो payment_details और payment_errors तालिकाओं को जोड़ता है, फिर दृश्य के लिए एक मॉडल है (जो केवल पढ़ने के लिए होगा)। कुछ DBs भौतिक विचारों का समर्थन करते हैं, जो प्रदर्शन के लिए एक अच्छा विचार हो सकता है।
रेल सर्वर और डीबी सर्वर, कॉन्फ़िगरेशन, डिस्क स्थान, नेटवर्क गति / विलंबता / आदि, निकटता, आदि पर हार्डवेयर या वीएम चश्मा पर भी विचार करें और यदि आप नहीं करते हैं, तो रेल एप्लिकेशन की तुलना में विभिन्न सर्वर / वीएम पर डीबी लगाने पर विचार करें। ।