बस सक्रिय रिकॉर्ड सीखना शुरू कर दिया और मैं सोच रहा हूं कि एकाधिक तालिकाओं से डेटा को सर्वोत्तम रूप से कैसे प्राप्त किया जाए, जहां एक SQL समेकित क्वेरी शामिल है।क्या रेल के सक्रिय रिकॉर्ड एसक्यूएल कुल प्रश्नों को संभाल सकता है?
निम्नलिखित उदाहरण में (एक चिकित्सा ऐप से) मैं प्रत्येक रोगी के लिए विभिन्न प्रकार की नवीनतम घटनाओं की तलाश कर रहा हूं (जैसे अंतिम यात्रा, अंतिम प्रयोगशाला आदि)। जैसा कि आप नीचे एसक्यूएल क्वेरी से देख सकते हैं मैं समूहबद्ध क्वेरी से अधिकतम (दिनांक) मान की तलाश में हूं। मैंने यह करने के लिए find_by_sql का सहारा लिया - हालांकि मैं देखना चाहता हूं कि find_by_sql का उपयोग किये बिना इसे कैसे किया जाए।
आईओओ - एक शुद्ध ActiveRecord दृष्टिकोण का उपयोग करके आप यहां आवश्यक डेटा कैसे प्राप्त करेंगे। Sql द्वारा
ढूँढें प्रत्येक प्रकार के लिए सबसे हाल ही में प्रविष्टियों को पुनः प्राप्त करने - ध्यान दें 'अधिकतम (EVENT_DATE)' यहाँ
strsql = "select p.lname, e.patient_id, e.event_type, max(e.event_date) as event_date
from events e
inner join patients p on e.patient_id = p.id
group by p.lname, e.patient_id, e.event_type"
यहाँ नमूना एसक्यूएल क्वेरी है: नीचे दी गई तालिका और कक्षा defs मैं के साथ परीक्षण कर रहे हैं रहा हूँ परिणाम:
lname, patient_id, event_type, latest 'Hunt', 3, 'Labtest', '2003-05-01 00:00:00' 'Hunt', 3, 'Visit', '2003-03-01 00:00:00' 'Seifer', 2, 'Labtest', '2002-05-01 00:00:00' 'Seifer', 2, 'Visit', '2002-03-01 00:00:00' Table Relationships are: Tables ---> Patients --> Events --> visits --> labtests --> ... other patients t.string :lname t.date :dob events t.column :patient_id, :integer t.column :event_date, :datetime t.column :event_type, :string visits t.column :event_id, :integer t.column :visittype, :string labtests t.column :event_id, :integer t.column :testtype, :string t.column :testvalue, :string
क्लासेस
class Patient < ActiveRecord::Base
has_many :events
has_many :visits, :through =>:events
has_many :labtests, :through => :events
end
class Event < ActiveRecord::Base
has_many :visits
has_many :labtests
belongs_to :patient
end
class Visit < ActiveRecord::Base
belongs_to :event
end
class Labtest < ActiveRecord::Base
belongs_to :event
end
ओपी से यहां त्वरित अनुवर्ती करें।1 मामूली चिमटा के साथ: रायन का कोड काम करता है (बनाम: शामिल) जुड़ता है और मेरी मूल पोस्ट में Find_By_Sql क्वेरी को प्रतिस्थापित करता है। बहुत ही शांत। हालांकि पास करने में मैं केवल ध्यान दूंगा कि (AFAIK) सभी एसक्यूएल प्रश्नों को ओआरएम कॉल के माध्यम से लागू नहीं किया जा सकता है (उदाहरण के लिए संघ क्वेरी जो तालिका से न्यूनतम और अधिकतम मान जोड़ती है)। मुझे संदेह है कि इसे ओआरएम के माध्यम से 2 अलग-अलग कॉल की आवश्यकता होगी, जबकि Find_By_Sql इसे 1 कॉल में कर सकता है उदा। find_by_sql ("तालिका टी से तालिका टी यूनियन सिलेक्स मैक्स (टी.एवेंट_Date) से न्यूनतम (टी.एवेंट_Date) चुनें" – BrendanC
मूल पोस्ट को उपयोग करने के लिए अपडेट किया गया: जुड़ता है। हालांकि आप सही हैं, ओआरएम के साथ हर सवाल नहीं किया जा सकता है, और यह सक्रिय रिकॉर्ड का लक्ष्य नहीं है। यह उद्देश्य से अधिकांश आवश्यकताओं को अच्छी तरह से फिट करने के लिए डिज़ाइन किया गया था और बाकी को find_by_sql के साथ संभव छोड़ दिया गया था। यह सबकुछ करने की कोशिश नहीं करता है, इसलिए अगर यह नौकरी बेहतर तरीके से फिट बैठता है तो find_by_sql का उपयोग करने में संकोच न करें। – ryanb