रेलों पर रूबी में / बोर्ड / के यूआरएल बनाने की कोशिश कर रहे हैं और त्रुटियां प्राप्त कर रहे हैं - रूबी-ऑन-रेल, रूबी, बाकी

मैं एक साधारण सोशल नेटवर्किंग साइट बनाने के लिए रेल पर रूबी का उपयोग कर रहा हूं जिसमें छात्र समूह की प्रत्येक समिति के लिए अलग-अलग संदेश बोर्ड शामिल हैं। मैं प्रत्येक बोर्ड के लिए यूआरएल संरचना चाहता हूं https://<base_url>/boards/<committee_name> और यह उपयोगकर्ता को उस समिति के लिए संदेश बोर्ड में लाएगा।

मेरी मार्ग.आरबी फ़ाइल इस तरह दिखती है:

resources :committees, only: [:index]
match "/boards/:name", to: "committees#index(name)"

Committees_controller.rb फ़ाइल का मेरा अनुक्रमणिका फ़ंक्शन इस प्रकार दिखता है:

def index(name)
@posts = Committee.where(name: name)
end

और फिर मैं इसका उपयोग करूंगा @posts सभी पदों को प्रदर्शित करने के लिए पृष्ठ पर परिवर्तनीय, लेकिन अभी जब मैं नेविगेट करता हूं https://<base_url>/boards/<committee_name> मुझे अज्ञात एक्शन त्रुटि मिलती है, और यह कहती है The action "index(name)" could not be found for CommitteesController

क्या कोई मुझे गलत काम करने के माध्यम से मार्गदर्शन कर सकता है?

एक बार जब मैं यह काम कर लेता हूं, तो मैं इस विचार को कैसे देख सकता हूं जो इस यूआरएल संरचना को दर्शाता है?

उत्तर:

उत्तर № 1 के लिए 1

इस तरह अपने मार्ग स्थापित करें:

resources :committees, only: [:index]
match "/boards/:name", to: "committees#show"

और इस तरह के नियंत्रक:

def index
@committees = Committee.all
end

def show
@committee = Committee.find_by_name!(params[:name])
end

आप वास्तव में नियंत्रक कार्यों के लिए तर्कों को पारित नहीं कर सकते जिस तरह से आप कोशिश कर रहे थे index(name)। इसके बजाए, आप इसका उपयोग करते हैं params हैश कि रेल आपको प्रदान करता है। :name मार्ग घोषणा का हिस्सा रेल को बताता है कि जो कुछ भी मैचों में है params[:name]

आपको समितियों की सूची और एकल समितियों को प्रदर्शित करने के लिए अलग-अलग कार्रवाइयों का भी उपयोग करना चाहिए। रेल सम्मेलनों में जाकर, ये होना चाहिए index तथा show क्रमशः क्रियाएं।


जवाब के लिए 0 № 2

रूटिंग करते समय, आप केवल विधि का नाम निर्दिष्ट करते हैं, न कि तर्क:

match "/boards/:name", to: "committees#show"

आम तौर पर आप कुछ घोषित करेंगे resources या match लेकिन दोनों नहीं। रीस्ट-फुल रहने के लिए, यह होना चाहिए show तरीका। सूचकांक एक है collection विधि, आमतौर पर रिकॉर्ड पहचानकर्ता का कोई भी प्रकार नहीं ले रहा है।

तर्क हमेशा के माध्यम से आते हैं params संरचना:

def show
@posts = Committee.where(name: params[:name])
end

मार्गों के माध्यम से उजागर नियंत्रक विधियां तर्क नहीं लेती हैं। आप बना सकते हैं private वे विधियां जो अन्य उद्देश्यों के लिए तर्क लेती हैं।


संबंधित सवाल
सबसे लोकप्रिय