यह उपलब्ध नहीं है क्योंकि एक मॉडल (आमतौर पर) में इसका उपयोग एमवीसी का उल्लंघन करता है (और यह आपके मामले में लगता है)। आप डेटा ले रहे हैं और इसे प्रस्तुति के लिए जोड़ तोड़ रहे हैं। यह, परिभाषा के अनुसार, मॉडल में नहीं है।
यहां कुछ उपाय दिए गए हैं:
मॉडल और दृश्य के बीच मध्यस्थता करने के लिए एक प्रस्तोता या दृश्य मॉडल ऑब्जेक्ट का उपयोग करें। यह लगभग निश्चित रूप से अन्य समाधानों की तुलना में अधिक प्रारंभिक कार्य की आवश्यकता है, लेकिन लगभग हमेशा एक बेहतर डिजाइन है। प्रस्तुतकर्ता / दृश्य-मॉडल में सहायकों का उपयोग करना MVC का उल्लंघन नहीं करता है, क्योंकि वे पारंपरिक कस्टम रेल सहायकों और तर्क से भरे विचारों की जगह, दृश्य परत में रहते हैं।
स्पष्ट रूप include ActionView::Helpers::NumberHelperसे JobsHelperरेल के आधार पर इसके बजाय स्पष्ट रूप से इसे आपके लिए लोड करने के लिए। यह अभी भी बहुत अच्छा नहीं है, क्योंकि आपको किसी मॉडल से सहायक तक नहीं पहुंचना चाहिए।
MVC और SRP का उल्लंघन करें । ऐसा करने के लिए fguillen का जवाब देखें । मैं इसे यहाँ नहीं सुनाऊँगा क्योंकि मैं इससे सहमत नहीं हूँ। फिर भी, हालांकि, क्या मैं सैम के जवाब में प्रस्तुति के तरीकों के साथ आपके मॉडल को प्रदूषित करने से असहमत हूं ।
अगर आपको लगता है कि "लेकिन मुझे अपने मॉडल में मेरे to_csvऔर to_pdfतरीके लिखने के लिए वास्तव में इसकी आवश्यकता है !", तो आपका पूरा आधार गलत है - आखिरकार, आपके पास कोई to_htmlतरीका नहीं है , क्या आप? और फिर भी आपकी वस्तु बहुत बार HTML के रूप में प्रदान की जाती है। अपने डेटा मॉडल को बनाने के बजाय अपने आउटपुट को उत्पन्न करने के लिए एक नया वर्ग बनाने पर विचार करें कि CSV क्या है ( क्योंकि यह नहीं होना चाहिए )।
मॉडल में ActiveModel सत्यापन त्रुटियों के लिए सहायकों का उपयोग करने के लिए, ठीक है, मुझे क्षमा करें, लेकिन ActiveModel / रेल्स ने हम सभी को डेटा लेयर में महसूस करने के लिए त्रुटि संदेश भेजने के बजाय, शब्दार्थ वापस करने के लिए मजबूर किया है। एक त्रुटि विचार को वापस करने के। बाद में एहसास हुआ- आहें । आप इसे प्राप्त कर सकते हैं, लेकिन इसका मूल अर्थ है ActiveModel का उपयोग न करना :: त्रुटियां। मैंने इसे किया है, यह अच्छी तरह से काम करता है।
एक तरफ के रूप में, यहां प्रस्तुतकर्ता / दृश्य-मॉडल में सहायकों को इसके तरीकों के सेट को प्रदूषित किए बिना शामिल करने का एक उपयोगी तरीका है (क्योंकि ऐसा करने में सक्षम होने का MyPresenterOrViewModel.new.link_to(...)कोई मतलब नहीं है):
class MyPresenterOrViewModel
def some_field
helper.number_to_currency(amount, :precision => 0)
end
private
def helper
@helper ||= Class.new do
include ActionView::Helpers::NumberHelper
end.new
end
end