2015-06-02 10 views
8

एक प्रणाली है कि उपयोगकर्ताओं को घटनाओं के लिए अन्य उपयोगकर्ताओं को आमंत्रित करने की अनुमति देता को देखते हुए के साथ शामिल हो:उत्सुक लोड हो रहा है एक कस्टम एक उदाहरण चर

class Event 
    has_many :invites 
end 

class User 
    has_many :invites 
    has_many :invited, inverse_of: :inviter, foreign_key: :inviter_id, class_name: 'Invite' 
end 

class Invite 
    belongs_to :user 
    belongs_to :event 
    belongs_to :inviter, class_name: 'User' 
    has_many :invited, -> (invite) { where(invites: { event_id: invite.event_id }) }, through: :user, class_name: 'Invite' 
end 

मैं एक साधारण रिपोर्ट है कि एक घटना के लिए सभी आमंत्रित करता चलता पैदा कर रहा हूँ। मैं रिपोर्ट को संशोधित करने के लिए भी कुछ कार्रवाई है कि नमूना घटना के लिए invited के खिलाफ किया जा सकता है शामिल करने के लिए कोशिश कर रहा हूँ:

<%- event.includes(:user).each do |invite| -%> 
    <%= invite.user.name %> 
    <%- invite.invited.each do |other| -%> 
    <%= link_to invite_path(other), method: :destroy do %> 
     ... 
    <% end %> 
    <%- end -%> 
<%- end -%> 

यह ठीक काम करता है, लेकिन एक एन 1 मुद्दा है। कस्टम एसोसिएशन लोड करने के लिए उत्सुकता से प्रयास करने का प्रयास करता है:

अस्वीकरण चेतावनी: एसोसिएशन स्कोप 'आमंत्रित' उदाहरण निर्भर है (स्कोप ब्लॉक एक तर्क लेता है)। व्यक्तिगत उदाहरण बनने से पहले प्रीलोडिंग होती है। इसका मतलब है कि एसोसिएशन के दायरे में कोई उदाहरण नहीं दिया जा रहा है। यह संभवतः टूटा या गलत व्यवहार में परिणाम होगा। इन संगठनों में शामिल होने, प्रीलोडिंग और उत्सुक लोडिंग को बहिष्कृत किया गया है और भविष्य में हटा दिया जाएगा।

क्या इस तरह उत्सुक लोड करने का कोई तरीका है? यह एक उदाहरण चर का उपयोग कर के बजाय has_many करने के लिए अन्य संकेत देने के लिए संभव है?

+0

मैं समझ क्या आप लाने के लिए कोशिश कर रहे हैं कोशिश कर रहा हूँ। एक ही उपयोगकर्ता से एक ही घटना में आमंत्रित करता है? –

+0

@ डी-साइड हाँ, अन्य प्राप्त करने की कोशिश एक प्रत्येक आमंत्रित किए गए उपयोगकर्ता आमंत्रित किया है। वास्तविक उदाहरण अधिक जटिल है लेकिन मैंने जितना संभव हो सके इस प्रश्न के लिए सरल बनाने की कोशिश की। –

+1

ठीक है, आप प्रति आमंत्रण आमंत्रित करने का संग्रह प्राप्त कर रहे हैं। यह एक दर्द होगा, क्योंकि इसे स्वयं में शामिल होने की आवश्यकता होती है, जिसके बदले में तालिका तालिकाओं में से एक को शामिल करने की आवश्यकता होती है। तो, एरियल उपयोग एक जरूरी प्रतीत होता है। –

उत्तर

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