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

रेल गतिशील जहां एसक्यूएल क्वेरी

आपका दृष्टिकोण थोड़ा हटकर है क्योंकि आप गलत समस्या को हल करने का प्रयास कर रहे हैं। आप ActiveRecord को सौंपने के लिए एक स्ट्रिंग बनाने का प्रयास कर रहे हैं ताकि यह एक क्वेरी बना सके जब आपको केवल एक क्वेरी बनाने का प्रयास करना चाहिए।

जब आप ऐसा कुछ कहते हैं:

Model.where('a and b')

यह कहने जैसा ही है:

Model.where('a').where('b')

और आप कह सकते हैं:

Model.where('c like ?', pattern)

इसके बजाय:

Model.where("c like '#{pattern}'")

उन दो विचारों को अपने self.instance_values . के साथ मिलाकर आपको कुछ ऐसा मिल सकता है:

def query
  self.instance_values.select { |_, v| v.present? }.inject(YourModel) do |q, (name, value)|
    q.where("#{name} like ?", "%#{value}%")
  end
end

या यहां तक ​​कि:

def query
  empties      = ->(_, v) { v.blank? }
  add_to_query = ->(q, (n, v)) { q.where("#{n} like ?", "%#{v}%") }
  instance_values.reject(&empties)
                 .inject(YourModel, &add_to_query)
end

वे मानते हैं कि आपने अपने सभी इंस्टेंस चर को ठीक से श्वेतसूची में डाल दिया है। यदि आपने नहीं किया है तो आपको करना चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jsonb फ़ील्ड में PostgreSQL का नाम बदलें विशेषता

  2. Python का उपयोग करके एक csv फ़ाइल में PostgreSQL क्वेरी निर्यात करना

  3. PostgreSQL में क्रॉसस्टैब के लिए गतिशील रूप से कॉलम उत्पन्न करें

  4. मान के आधार पर किसी स्ट्रिंग को सूची से किसी अन्य स्ट्रिंग से बदलें

  5. पोस्टग्रेस्क्ल में फ़ंक्शन, प्रक्रिया, ट्रिगर स्रोत कोड कैसे प्रदर्शित करें?