2012-01-20 10 views
10

मुझे ImplicitTest नामक एक मॉडल मिला है। इसे इसे Test नामक रूबी ऑब्जेक्ट के रूप में जाना जाता है, बस रेल में बहुत सी चीजें तोड़ती है।संसाधन मॉडल नाम पथ या नियंत्रक से मेल नहीं खाता है जब रूटिंग लिखना

हालांकि, मैं अभी भी इसे test (उदा। /tests, /test/1/edit और आगे के रूप में एक विश्वसनीय संसाधन के रूप में बेनकाब करना चाहता हूं)। इसके अलावा, नियंत्रक को TestsController के रूप में रखना बहुत अच्छा होगा, हालांकि यह कम महत्वपूर्ण है।

मैं अपने routes.rb फ़ाइल में सरल resources :tests लाइन होने से यह कर रहा था, लेकिन यह RESTful रूपों के लिए विफल रहता है (जैसे <%= form_for @test ... > - यह ऊपर उठाता है कि @test ऑब्जेक्ट प्रकार ImplciitTest की है, और देखने के लिए implicit_test_path की कोशिश करता है जो मौजूद नहीं है।

मैं विकल्पों form_for जोड़ने की कोशिश की है, लेकिन निष्कर्ष है कि दोनों new और edit कार्यों के लिए प्रपत्र काम है करने के लिए के लिए आया था, वहाँ कोई एक ही, form_for पूछने का एकीकृत तरीका था() एक अलग उपसर्ग का उपयोग करने पथ नाम लुकअप के लिए।

तो मैं रूटिंग से समस्या तक पहुंचने की कोशिश कर रहा हूं पक्ष। वहाँ एक लाइन मैं मार्गों फाइल करने के लिए जोड़ सकते हैं कि करने के लिए मुझे अनुमति देगा:

  1. एक मॉडल ImplicitTest
  2. कहा जाता है के रूप में पथ/परीक्षण
  3. उपयोग <% = form_for @test है .. ।%> टैग अभी भी
  4. TestsController (वैकल्पिक)

मैं जानता हूँ कि मैं यह करने के स्वर्ण पथ प्रस्थान रहा हूँ, लेकिन रेल दे नहीं कर रहा है मुझे एक मॉडल नाम के रूप में टेस्ट उपयोग करें, लेकिन यह के रूप में नियंत्रक रखें वह नाम है जिसे उपयोगकर्ता उम्मीद करेंगे इस संसाधन के लिए यूआरएल में देखें, इसलिए मुझे उम्मीद है कि सरल रूटिंग विकल्प हैं जो इसे सक्षम करते हैं।

उत्तर

8

आपको बस इतना करना अपने मार्ग पर :path विकल्प सेट किया गया है की जरूरत है:

resources :implicit_tests, :path => '/test' 

तुम अब भी मानक implicit_tests_path सहायक इस तरह का प्रयोग करेंगे, भी, तो अपने कोड को बदलने के लिए वितरित हो जाते हैं की जरूरत नहीं है यूआरएल योजना।

+2

यह contoller नाम को समायोजित नहीं करता था, लेकिन इसे संसाधनों में समायोजित करता है: implicit_tests,: नियंत्रक => "परीक्षण", पथ => "परीक्षण" 'उसमें जोड़ना प्रतीत होता है। – Phantomwhale

1

coreyward के जवाब पर देख जबकि, मैं होने का एक छोटा, लेकिन कम सहज विधि भर में ठोकर खाई है कि मैं क्या जरूरत है:

resources :tests, :as => "implicit_tests"

इन अनिवार्य रूप से एक ही बात (अतिरिक्त :controller स्विच मैं जोड़ा दिया कर रहे हैं टिप्पणियों में)? या एक पसंदीदा है?

+0

आप निश्चित रूप से कर सकते हैं यह भी, लेकिन आपके इम्प्लीसिट टेस्ट कंट्रोलर और मॉडल के मिश्रित संदर्भ जो नाम "रेल मार्ग" में वास्तव में फिट नहीं होते हैं, भ्रमित हो जाते हैं। – coreyward

+1

आह ठीक है, उतना सोचा। रेलवे के करीब जितना संभव हो उतना प्रयास करने और रहने के लिए खुश है, इसलिए मैं आपके उत्तर के साथ जाऊंगा। राउटिंग विकल्पों की संख्या कम रखने के लिए, और नियंत्रक नाम को मॉडल नाम के करीब रखने के लिए, इम्प्लीटटेस्ट कंट्रोलर होने के लिए भी वापस जा सकता है, जो इसे पथ के नाम के करीब रखने से बेहतर है; अनिवार्य रूप से ऊपर क्या सुझाव है। – Phantomwhale

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