रेलवे 3 का उपयोग करके सहायक लिंक_to देखें, मॉडल के अंदर link_to सहायक, या उस मामले के लिए किसी भी सहायक का उपयोग करने का कोई तरीका है?मॉडल वर्ग
उत्तर
कुछ कारण हैं कि आपको मॉडल में link_to की आवश्यकता हो सकती है। हां, @andy, यह एमवीसी का उल्लंघन है, लेकिन इसका मतलब यह नहीं है कि आपको प्रश्न का जवाब न देने के लिए अंक प्राप्त करना चाहिए।
@schwabsauce, यह है कि तुलना में आसान है। यदि आप प्रारंभकर्ता या कुछ में करते हैं तो पहली पंक्ति भी सख्ती से जरूरी नहीं है। समान चीज़ .sanitize और .raw और अन्य भयानक कार्यों का पूरा भार के लिए काम करती है।
ActionView::Base.send(:include, Rails.application.routes.url_helpers)
ActionController::Base.helpers.link_to(whatever)
आप autopaths उपयोग करने के लिए आप अपने LINK_TO अंदर यह करने के लिए हो सकता है चाहते हैं:
Rails.application.routes.url_helpers.page_path(@page)
हैकर के बिना नहीं।
यदि आपको लगता है कि आपको मॉडल में link_to
की आवश्यकता है, तो आप शायद Model-View-Controller architecture के कुछ सिद्धांतों का उल्लंघन कर रहे हैं।
एक मॉडल डेटा और व्यवसाय तर्क के लिए एक जगह होना चाहिए, लेकिन लिंक पैदा लगभग निश्चित रूप से नियंत्रक या देखने के लिए एक नौकरी है (या, विशेष रूप से रेल, एक सहायक वर्ग में)।
include ActionView::Helpers::UrlHelper
include ActionController::UrlFor
include Rails.application.routes.url_helpers
cattr_accessor :controller
def controller; self.class.controller; end
def request; controller.request; end
तब मेरे नियंत्रक में मैं विशेषता आबादी (खरोंच से एक नियंत्रक बनाने हैश बहस में डेटा की एक महत्वपूर्ण राशि की आवश्यकता है):
धन्यवाद। सहायक देखने के लिए चीजों को हटाया। सब अभी ठीक है। – Krule
मॉडल में मददगारों का उपयोग करने के अच्छे कारण हैं। लेकिन इस बिंदु पर, यदि आप एक राय देने जा रहे हैं तो कम से कम एक समाधान प्रदान करें यदि उन्होंने इसे सोचा है। यह संभव है कि 2k प्रतिनिधि वाले किसी व्यक्ति के पास सीधे सिर हो। –
मैं इस निम्नलिखित समावेशन के साथ काम मिल गया।
Lead.controller = self
fwiw, रेल दस्तावेज इस समाधान के लिए रास्ता का नेतृत्व करता है। एक्शनडिस्पाच :: रूटिंग :: UrlFor के लिए दस्तावेज़ बताते हैं कि "युक्ति: यदि आपको अपने मॉडल या किसी अन्य स्थान से यूआरएल उत्पन्न करने की आवश्यकता है, तो एक्शनकंट्रोलर :: UrlFor वह है जिसे आप ढूंढ रहे हैं।" फिर जब आप उस फ़ाइल को एक त्रुटि संदेश के रूप में ऑफ़र करते हैं: उठाएं "#url_for का उपयोग करने के लिए, आपको रूटिंग हेल्पर्स को स्पष्ट रूप से शामिल करना होगा।" "उदाहरण के लिए, 'Rails.application.routes.url_helpers" तो मुझे लगता है रेल सम्मेलनों द्वारा स्वीकार्य है - कभी-कभी लिंक बनाने के लिए यह सबसे अच्छा तरीका/सर्वोत्तम स्थान है :) – schwabsauce
हां, उदाहरण के लिए, यदि आपका मॉडल किसी तृतीय पक्ष को भुगतान प्राधिकरण को प्रबंधित कर रहा है, ऑफसाइट गेटवे, और वापसी/रद्द URL उत्पन्न करने की आवश्यकता है ऐप पर वापस। – hoffmanc
बहुत सावधान रहो चक की पोस्ट में उल्लिखित अगर आप रेल 3.2 में यह कर रहे हैं सलाह के बाद। 1। ऐसा प्रतीत होता है कि रेलवे 3.2.1 में गैर-दृश्य वर्गों में लिंक_to सहायक सहित लिंक को सुरक्षित करने का एक सुरक्षित तरीका नहीं है। नीचे उल्लिखित एक सुरक्षित तरीका है (जो किसी भी मामले में हमारे लिए काम करता है)।
हम अपने वर्गों में से एक में चक की पोस्ट में दृष्टिकोण का इस्तेमाल किया, यह बहुत परेशान और डिबग परिणामों के लिए मुश्किल होने समाप्त हो गया। यह साइड इफेक्ट्स/बग का कारण बन गया जो केवल बहुत विशिष्ट (और दुर्लभ) परिस्थितियों में बदल गया।
ActionView::Base.send(:include, Rails.application.routes.url_helpers)
ActionView::Base
कह रहा है Rails.application.routes.url_helpers
, जो ActionView::Base
जाहिरा तौर पर पहले से ही अपने आप ही करता है शामिल करने के लिए:
समस्या, जहाँ तक हम बता सकते हैं, कि इस लाइन है। इसमें url_helpers
दूसरी बार शामिल है, ऐसा लगता है कि मार्ग राज्य के पुन: प्रारंभिकरण (कक्षाओं में @_routes जिनमें एक्शनडिस्चैच :: रूटिंग :: UrlFor मॉड्यूल शामिल है)। अपवाद बार देखा गया है कि, कॉल करने का प्रयास प्रत्यक्ष या परोक्ष रूप में, url_for विधि ActionView::Base
के बाद url_helpers
दूसरी बार शामिल किया गया है:
यह मालूम होता है यादृच्छिक और अस्पष्टीकृत "NilClass अपरिभाषित विधि 'url_for' शून्य के लिए" की ओर जाता है।
हमारे लिए काम किया गया समाधान ActionView::Base
को url_helpers
दोबारा शामिल करने के बजाय, UrlHelper
मॉड्यूल को कहीं भी शामिल करें, जहां कहीं भी आपको इसकी आवश्यकता हो।
फिर जब आप LINK_TO का उपयोग करें और आप बस कर सकते हैं इस (यह मानते हुए login_path अपने अनुप्रयोग के लिए मान्य है) पथ का उपयोग करने की जरूरत है:
include ActionView::Helpers::UrlHelper
...
link = link_to('here', Rails.application.routes.url_helpers.login_path)
यह हमें एक बहुत लंबे समय है और काफी एक बहुत ले लिया डबल-इन के कारण होने वाली बग को ट्रैक करने के लिए सिर स्क्रैचिंग का और मैं बस दूसरों को चेतावनी देना चाहता था कि रेल बेस कक्षाओं के व्यवहार को ट्विक करते समय सावधान रहें।
इसे साझा करने के लिए धन्यवाद! मुझे खुशी है कि आपको एक बेहतर तरीका मिला! –
एक-लाइनर: 'एक्शन व्यू :: हेल्पर्स :: UrlHelper' – karlingen
@karlingen - 'Rails.application.routes ... के संदर्भ को छोड़कर" संदेश को जन्म दे सकता है "url_ को पास किए गए तर्कों को संभाला नहीं जा सकता है। कृपया मार्गों की आवश्यकता है या अपना खुद का कार्यान्वयन प्रदान करें " – Del
LINK_TO सहायक, MVC उल्लंघन
क्या एंडी ने कहा,
आप मॉडल आप शायद पर एक बड़ा लंबे नज़र रखना करने की आवश्यकता में HTML पैदा कर रहे हैं तो आप क्या कर रहे हैं और क्यों।
यूआरएल सहायकों दूसरी ओर
URL में अक्सर/... यहां तक कि मॉडल में, उदाहरण के लिए कक्षाएं, सेवा/प्रपत्र/एपीआई के सभी प्रकार में दृश्य-नियंत्रक कोड के काम के बाहर में आते हैं, यदि आप यह करना है।
हाँ, Rails.application.routes.url_helpers एक मॉड्यूल है, लेकिन इसका मतलब यह नहीं है कि आप बस इसे शामिल करना चाहिए जहाँ भी या हास्यास्पद सामान हो रहा शुरू कर देंगे के रूप में गैरी डाल दिया:
https://www.destroyallsoftware.com/blog/2011/one-base-class-to-rule-them-all
क्या आप क्या कर सकते हैं:
delegate :url_helpers, :to => 'Rails.application.routes'
और उसके बाद का उपयोग, उदाहरण के लिए
url_helpers.home_url
- 1. मॉडल वर्ग
- 2. नैन्सी मॉडल बाल वर्ग
- 3. रेल रेक टास्क - मॉडल वर्ग
- 4. क्यों दो वर्ग, मॉडल और डोमेन मॉडल देखें?
- 5. डेटाबेस में एक सार आधार वर्ग और उप-वर्ग मॉडल
- 6. Django मॉडल और विरासत वर्ग एकीकरण
- 7. Django ModelForm कोई मॉडल वर्ग निर्दिष्ट
- 8. प्रतीक से मॉडल वर्ग प्राप्त करें
- 9. Django मॉडल और अजगर वर्ग जिम्मेदार बताते हैं
- 10. डेटाबेस से इकाई फ्रेमवर्क 5 अपडेट मॉडल तालिका वर्ग
- 11. रेल लेनदेन: क्या यह ActiveRecord मॉडल वर्ग पर महत्वपूर्ण है?
- 12. मॉडल वर्ग की विधि किस तरह की विधियां होनी चाहिए?
- 13. as_json या to_json मॉडल वर्ग का नाम ओवरराइड करें
- 14. Django - कैसे करता है, तो मॉडल वर्ग, सार
- 15. Django खोल में एक मॉडल वर्ग को परिभाषित करने में
- 16. PHP एमवीसी बेस्ट प्रैक्टिस - नियंत्रक से मॉडल वर्ग के लिए पास सत्र परिवर्तक या मॉडल
- 17. मॉडल
- 18. मॉडल
- 19. मॉडल-व्यू-प्रस्तुतकर्ता: मॉडल स्थिर क्यों है?
- 20. रुपे मॉडल/सहेजें में मॉडल मॉडल सहेजें
- 21. Django मॉडल
- 22. रेल: मॉडल
- 23. backbone.js मॉडल नेस्टेड मॉडल
- 24. नेवला मॉडल परीक्षण मॉडल
- 25. रेल मॉडल मॉडल नाम
- 26. बेंचमार्किंग रेल मॉडल मॉडल
- 27. एसक्यूएलकेमी मॉडल
- 28. आंशिक वर्ग
- 29. डेटा मॉडल
- 30. एंगुलरजेएस: मॉडल
इस सवाल को कुछ समय पहले पूछा गया था और उस समय @ एंडी की सलाह ने मुझे इस समस्या को हल करने में मदद की। हालांकि, आप एक ऐसे अर्थ में सही हैं जो वास्तविक प्रश्न का उत्तर नहीं देता है। – Krule