PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

ऐसी स्थिति जहां ActiveRecord और SQL अज्ञात OID को स्ट्रिंग के रूप में माने जाने के कारण समान परिणाम नहीं लौटाते हैं

आपको यह समस्या इसलिए मिली क्योंकि ActiveRecord इस पंक्ति को आपकी खाता तालिका से पंक्ति के रूप में नहीं पहचान सकता है। एआर आपके एसक्यूएल को पार्स नहीं कर रहा है और यह सुनिश्चित नहीं है कि अज्ञात कोर्टेज के साथ क्या करना है।

अगर आप find_by_sql . का इस्तेमाल करते हैं आपकी चुनी गई विशेषताएँ आपके मॉडल से ठीक से मैप नहीं की गई हैं लेकिन फिर भी पहुँच योग्य हैं, इसलिए प्रयास करें:

result.id
result.email

लेकिन आपके पास इसे ठीक करने के दो तरीके भी हैं।

पहले (यह बहुत हैकिश है लेकिन आसान समाधान है), अपने sql को Arel . में बदलें , जो कि दायरे के लिए मान्य है:

scope :unverified_with_no_associations, -> {
  send(:default_scoped).from(Arel.sql("(SELECT * FROM accounts WHERE level = 0 AND id NOT IN
                (SELECT DISTINCT(account_id) FROM verifications) AND id NOT IN 
                (SELECT DISTINCT(account_id) FROM positions) AND id NOT IN
                (SELECT DISTINCT(account_id) FROM edits) AND id NOT IN
                (SELECT DISTINCT(account_id) FROM posts) AND id NOT IN
                (SELECT DISTINCT(account_id) FROM reviews) AND id NOT IN
                (SELECT DISTINCT(sender_id) FROM kudos) AND id NOT IN
                (SELECT DISTINCT(account_id) FROM stacks WHERE account_id IS NOT NULL))  
                AS accounts"))

... और AR को अलग तरीके से कॉल करें:

Account.unverified_with_no_associations.select(:id, :email).distinct

दूसरा (यह बहुत बेहतर समाधान है):

सीधे एसक्यूएल का प्रयोग न करें। Arel . के साथ अपना दायरा फिर से लिखें (https://github.com/rails/arel ) या squeel . के साथ (https://github.com/activerecord-hackery/squeel )




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्थानीय समय को UTC में कैसे बदलें?

  2. PostgreSQL के साथ डेटाबेस टेबल आरेख उत्पन्न करने के लिए उपकरण?

  3. PostgreSQL एकाधिक पैरामीटर्स के साथ समुच्चय

  4. जेपीए मानदंड एपीआई के साथ पोस्टग्रेएसक्यूएल सरणी कॉलम को कैसे फ़िल्टर करें?

  5. रेल Postgresql एकाधिक स्कीमा और एक ही तालिका का नाम