2011-12-14 18 views
15

मैं एक ActiveAdmin अनुक्रमणिका पृष्ठ मिल गया हैउत्सुक लोड हो रहा है जुड़े मॉडल

ActiveAdmin.register Bill 

और मैं संबद्ध मॉडल

index do 
    column "User" do |bill| 
    link_to bill.user.name, admin_user_path(bill.user) 
    end 
end 

के लिंक प्रदर्शित करने के लिए कोशिश कर रहा हूँ लेकिन मैं एन में चलाने 1 क्वेरी समस्या - प्रत्येक उपयोगकर्ता को लाने के लिए एक प्रश्न है।

क्या बिलों के उपयोगकर्ताओं को लोड करने में उत्सुकता का कोई तरीका है?

उत्तर

26

नहीं है एक अलग पोस्ट पर एक जवाब, लेकिन यह अच्छी तरह से वर्णन करता है कि आपको यहां क्या करना है।

controller do 
    def scoped_collection 
     Bill.includes(:user) 
    end 
    end 

यहां, आपको यह सुनिश्चित करना होगा कि आप दायरे का पालन करें। तो यदि आपका नियंत्रक scope_to'ed है, तो आप उपरोक्त मॉडल नाम को scope_to'ed param के साथ प्रतिस्थापित करना चाहते हैं।

+2

के लिए तैयार किया गया यह पृष्ठबद्ध नहीं है = परिणाम विशाल हो सकता है – okliv

1

महत्वपूर्ण संपादित करें नोट: क्या इस प्रकार वास्तव में झूठी है, एक स्पष्टीकरण के लिए टिप्पणियों को देखने। हालांकि मैं यह जवाब छोड़ देता हूं जहां यह खड़ा है क्योंकि ऐसा लगता है कि मैं गाइड द्वारा उलझन में अकेला नहीं हूं, इसलिए शायद किसी और को यह उपयोगी लगेगा।

मैं मान लेते हैं कि

class Bill < ActiveRecord::Base 
    belongs_to :user 
end 

तो according to RoR guides यह पहले से ही उत्सुक-लोडेड है:

उपयोग करने के लिए कोई ज़रूरत नहीं है: तत्काल संघों के लिए शामिल हैं - जो है, अगर आप belongs_to आदेश है: ग्राहक, तो ग्राहक आवश्यक होने पर स्वचालित रूप से उत्सुक लोड हो जाता है।

अगर यह सच है तो आप अपने एसक्यूएल लॉग की जाँच करनी चाहिए (पता नहीं था कि अपने आप को, मैं सिर्फ कुछ के बारे में :include आप जवाब देने के लिए की पुष्टि करने गया था जब मैंने देखा यह ... मुझे पता है)

+0

में आधिकारिक दस्तावेज में बताया गया है मुझे लगता है कि यह बहुत ही संदिग्ध है, लेकिन कौन जानता है? –

+2

_ जब ग्राहक की आवश्यकता होती है तो ग्राहक स्वचालित रूप से उत्सुक होता है - इसका मतलब यह है कि, यदि आपके पास 1000 ऑर्डर हैं और उन पर पुनरावृत्ति है, तो आप 'order1.customer'' कहें, और 'ग्राहक 1' लोड हो गया है क्योंकि इसकी आवश्यकता है। फिर आप 'order2.customer' तक पहुंचते हैं, लेकिन हे, आपने यह नहीं कहा कि आपको इसकी आवश्यकता होगी, इसलिए डेटाबेस के लिए एक और क्वेरी की गई है। लेकिन यह अभी भी नहीं जानता है कि आपको अपने अगले पुनरावृत्ति पर 'ग्राहक 3' की आवश्यकता होगी, इसलिए आपको इसे साफ़ करने के लिए 1. – RocketR

+0

के बजाय 1000 प्रश्न प्राप्त होंगे। मुझे भ्रमित चीजों का पर्दाफाश करने का यह तरीका मिल गया है, लेकिन अंग्रेजी मेरी मूल भाषा नहीं है। –

10

ऐसा करने का तरीका scoped_collection विधि (जैसा कि जेफ एन्सल के उत्तर में उल्लेख किया गया है) को ओवरराइड करना है, लेकिन मौजूदा दायरे को बनाए रखने के लिए super पर कॉल करें। इस तरह आप मौजूदा दायरे और किसी भी पेजिनेशन/फ़िल्टरिंग को बनाए रखते हैं जिसे स्क्रैच से शुरू करने के बजाय ActiveAdmin द्वारा लागू किया गया है।

ActiveAdmin.register Bill do 
    controller do 
    def scoped_collection 
     super.includes :user 
    end 
    end 

    index do 
    column "User" do |bill| 
    link_to bill.user.name, admin_user_path(bill.user) 
    end 
    end 
end 

रूप http://activeadmin.info/docs/2-resource-customization.html

+3

यह स्वीकार्य उत्तर होना चाहिए – danielricecodes

संबंधित मुद्दे