2017-04-15 26 views
8

मैं अंगूर इकाई फाइल के अंदर कई वर्गों करना चाहते हैं में प्रत्येक इकाई, इस फ़ोल्डर संरचना एप्लिकेशन/API/proj/API/v2/संस्थाओं/committees.rb हैअंगूर एक एकल फाइल

module PROJ::API::V2::Entities 
class Committee < Grape::Entity 
expose :id 

expose :name, :full_name, :email, :tag, :parent_id 

expose :country do |entity, option| 
    entity.parent.name if entity.parent.present? 
end 

# include Urls 

private 
    def self.namespace_path 
    "committees" 
    end 
end 

    class CommitteeWithSubcommittees < CommitteeBase 
     # include ProfilePhoto 
     expose :suboffices, with: 'PROJ::API::V2::Entities::CommitteeBase' 
     end 

और अंदर अंगूर एपीआई

present @committees, with: PROJ::API::V2::Entities::Committee 

काम कर रहा है। लेकिन अगर मैं

present @committees, with: PROJ::API::V2::Entities::CommitteeList 

के साथ पेश करता है यह काम नहीं कर रहा है। लेकिन यह तब काम करता है जब मैं इसे committee_list.rb नाम की एक नई फ़ाइल में स्थानांतरित करता हूं।

उत्तर

5

आपको अपनी पोस्ट से कुछ महत्वपूर्ण जानकारी याद आ रही है क्योंकि आपने CommitteeList या CommitteeBase नामक कक्षा को परिभाषित नहीं किया है। मुझे लगता है कि आपने उन्हें परिभाषित किया है और आपने उस कोड को आपूर्ति नहीं की है।

जिस समस्या में आप चल रहे हैं, उसके साथ रेलों को ऑटोलोड करने के तरीके के साथ क्या करना है। इस पर more informationavailable elsewhere है, लेकिन अनिवार्य रूप से आपको यह सुनिश्चित करना चाहिए कि आपके वर्ग के नाम, मॉड्यूल नाम, निर्देशिका नाम, और फ़ाइल नाम सभी मेल खाते हैं। जब आप अपनी CommitteeList कक्षा को अपनी फ़ाइल में ले जाते हैं तो यह काम करता है क्योंकि रेल गतिशील रूप से कक्षा को खोजने में सक्षम है।

मैं कुछ अनुमान काम आप क्या प्रदान की के आधार पर करने के लिए मिला है, लेकिन आप कुछ है कि इस तरह दिखता है चाहता हूँ:

# app/api/proj/api/v2/entities/committee.rb 
module PROJ::API::V2::Entities 
    class Committee < Grape::Entity; end 
end 

# app/api/proj/api/v2/entities/committee_base.rb 
module PROJ::API::V2::Entities 
    class CommitteeBase; end 
end 

# app/api/proj/api/v2/entities/committee_with_subcommittee.rb 
module PROJ::API::V2::Entities 
    class CommitteeWithSubcommittee < CommitteeBase; end 
end 

# app/api/proj/api/v2/entities/committee_list.rb 
module PROJ::API::V2::Entities 
    class CommitteeList < CommitteeBase; end 
end 

ध्यान दें कि इस उदाहरण में मैं कुछ चीजें नाम दिया गया है; आपके वर्ग के नाम एकवचन (committeecommittees नहीं) होना चाहिए और फ़ाइल नाम उनसे मेल खाना चाहिए, लेकिन उस परिवर्तन से आपके ऐप में अन्य समस्याएं हो सकती हैं। आम तौर पर, you should use singular और बहुवचन नहीं।

मैं अधिक जानकारी के लिए the Rails guide entry on constants and autoloading पढ़ने की अनुशंसा करता हूं।

अपडेट किया गया:

अपने सार में आप कहते हैं कि तुम Uninitialized constant PROJ::API::V2::Entities::CommitteeOffice मिलता है जब आप निम्न कोड के साथ present @committees, with: PROJ::API::V2::Entities::CommitteeOffice चलाएँ:

# app/api/proj/api/v2/entities/committee_base.rb 
module PROJ::API::V2::Entities 
    class CommitteeBase < Grape::Entity; 
    expose :id 
    end 
    class CommitteeOffice < CommitteeBase; 
    expose :name 
    end 
end 

आप क्योंकि रेल केवल नामित वर्ग के लिए दिखेगा यह त्रुटि प्राप्त फ़ाइल में PROJ::API::V2::Entities::CommitteeBase। यदि आप अपनी इकाई कक्षाओं के लिए एक एकल मोनोलिथिक फ़ाइल का उपयोग करना पसंद करते हैं, तो आपको उपरोक्त फ़ाइल app/api/proj/api/v2/entities.rb नाम देना होगा।

फ़ाइल app/api/proj/api/v2/entities.rb नामकरण करके, यह रेल को बताता है "इस फ़ाइल में मॉड्यूल Entities और इसकी सभी कक्षाएं हैं।"

+0

फ़ाइल संरचना के साथ अपने मेरे लिए ठीक काम कर रहा है, लेकिन अगर मैं इस जैसी संरचना भी अपने काम नहीं कर रहा https://gist.github.com/anbublacky/a6e66217b2fcdeb52fe580864beecf7f –

+0

अद्यतन सार कृपया सार के आधार पर –

+0

अपडेट किया गया जवाब की जांच – anothermh

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