2013-01-07 25 views
7

के माध्यम से मैं rails3_acts_as_paranoid मणि का उपयोग कर रहा हूं, और has_many के साथ दायरे को नियंत्रित करने में कुछ समस्याएं हैं: संघों के माध्यम से।रेल कृत्यों_as_paranoid और has_many:

उदाहरण

लिए
# User.rb 
acts_as_paranoid 
has_many :folders 
has_many :files, :through => :folders 

-

# Folder.rb 
acts_as_paranoid 
belongs_to :user 
has_many :files, :dependent => :destroy 

-

# File.rb 
acts_as_paranoid 
belongs_to :files 

अब बस कहीं कहना users_controller.rb मैं एक उपयोगकर्ता से संबंधित सभी फाइलों को क्वेरी करना चाहते हैं में की सुविधा देता है, चाहे वे हटा दिए गए हों, और/या हटाए गए फ़ोल्डर्स से संबंधित हों। इसलिए स्वाभाविक रूप से मैं निम्नलिखित की तरह कुछ करने के लिए ग्रहण करेंगे

current_user.files.with_deleted 

with_deleted विधि यह files.deleted_at IS NULL

को दूर करने में काम है ... लेकिन ... यह does not फ़ोल्डरों जो प्रयोग किया जाता है के लिए default_scope को दूर करता है पर्दे के पीछे की तरह। तो हमारे पास अभी भी folders.deleted_at IS NULL स्थिति है, जो मुझे उन फ़ोल्डर्स से संबंधित फ़ाइलों को पुनर्प्राप्त करने से रोकती है जहां delete_at शून्य नहीं है।

मैं act_as_paranoid का उपयोग करना जारी रखना चाहता हूं, क्योंकि यह मेरे ऐप के अन्य सभी स्थानों में अविश्वसनीय रूप से उपयोगी है, और मैन्युअल फ़िल्टरिंग और .where_values सरणी के तत्वों को पॉप आउट करने की कोशिश नहीं कर रहा हूं। लेकिन मुझे जटिल क्षेत्रों को संभालने के बारे में बहुत कुछ पता नहीं है या कौन सी विधियां उपलब्ध हैं।

+0

ऐसा लगता है कि #unscoped विधि वह है जो आप यहां खोज रहे हैं: http://apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/unscoped – pjam

+0

मैंने अनसुलझा विधि की कोशिश की, लेकिन यह दायरे को छोड़ देता है स्वचालित रूप से फाइलों को उपयोगकर्ता को ब्रिजिंग में शामिल करने के लिए, विशेष रूप से 'INNER फ़ोल्डरों पर फ़ोल्डरों में शामिल हों। फ़ोल्डर्स_आईडी = फ़ोल्डर्स.आईडी फ़ोल्डर्स.यूसर_आईडी = 1' जब तक कि मुझे इसे रखने के लिए अनकॉप्ड की सुविधा याद न हो? – Misterparker

+0

मैं अभी भी जांच कर रहा हूं कि मुझे कोई समाधान मिल रहा है, लेकिन बस ध्यान दें कि '@user = user.find current_user.id' पंक्ति बेकार है, क्योंकि आप current_user – pjam

उत्तर

9

वैसे मेरा प्रश्न नीचे मतदान हुआ, यकीन नहीं क्यों। लेकिन मुझे जवाब मिला:

जब has_many के माध्यम से, समस्या के माध्यम से मॉडल (इस मामले में फ़ोल्डर्स) के दायरे को नियंत्रित करने में असमर्थता थी।

बाहर कर देता है तो आप सिर्फ इस

@myvar = Folder.unscoped { current_user.files.with_deleted } 
करने के लिए जो कोई भी यह downvoted

कर सकते हैं - मुझे पता है क्यों चाहते हैं, तो मैं बेहतर सवाल अगली बार पूछ सकते हैं। धन्यवाद!