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

रेल/पोस्टग्रेज, 'विदेशी कुंजी' सरणी में संग्रहीत 1-कई एसोसिएशन बनाने के लिए

आप इस सरणी के बारे में रेल को जागरूक नहीं कर पाएंगे और इसका उपयोग संघों के लिए नहीं कर पाएंगे।

लेकिन यदि आप उपयोगकर्ताओं को सौंपे गए कार्यों की त्वरित खोज/फ़िल्टरिंग करना चाहते हैं तो आप कार्य ऑब्जेक्ट में उपयोगकर्ता आईडी की एक सरणी रख सकते हैं। अन्यथा, आपको अपनी मानक संबद्धता तालिका में ऐलिस को सौंपे गए सभी कार्यों को खोजने के लिए एक जॉइन करना होगा।

तो समाधान यह है कि एसोसिएशन तालिका को बनाए रखा जाए, लेकिन टास्क ऑब्जेक्ट में असाइनी यूजर आईडी को भी डुप्लिकेट किया जाए और तेजी से खोज/फ़िल्टरिंग के लिए उस आईडी सूची का उपयोग किया जाए।

आपको after_create . से जुड़ना होगा और after_destroy असाइनी ऑब्जेक्ट्स के लिए जीवनचक्र और टास्क रिकॉर्ड ऐरे में नई असाइनी आईडी डालें। और फिर जब किसी कार्य से एक असाइनी को हटा दिया जाता है तो आईडी को हटाने के लिए सरणी को अपडेट करें।

सभी ऐरे ऑपरेटरों के लिए पोस्टग्रेज डॉक्स देखें:

कुछ इस तरह:

class Task < ActiveRecord::Base
    has_many :assignees, :dependent => :destroy
end

class Asignee < ActiveRecord::Base

    belongs_to :task
    after_create :insert_task_assignee
    after_destroy :remove_task_assignee

    # assumes that there is a column called assignee_id
    # that contains the User ID of the assigned person

    private

    def insert_task_assignee
        # TODO: check for duplicates here - before we naively push it on?
        task.assignee_list = task.assignee_list.push(assignee_id)
        task.assignee_list.save
    end

    def remove_task_assignee
        id_list = task.assignee_list
        id_list.reject! { |candidate_id| candidate_id == assignee_id }
        task.assignee_list = id_list
        task.assignee_list.save
    end

end

# find all tasks that have been assigned Alice & Bob
# this will require the `postgres_ext` gem for Ruby / Postgres array searching
tasks = Task.where.contains(:assignee_list => [alice.id, bob.id]).all



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. किसी मौजूदा पोस्टग्रेज तालिका को यथासंभव पारदर्शी रूप से विभाजित तालिका में माइग्रेट कैसे करें?

  2. नया डेटा Postgres पर रेल सरणी स्तंभ के लिए जारी नहीं है

  3. PostgreSQL में एक तालिका में लापता तिथि जोड़ना

  4. PostgreSQL का उपयोग करके डेटाबेस कैसे स्विच करें

  5. विशिष्ट बहु विशेषता मानों वाले सभी उत्पादों को कैसे खोजें