এটি উপলভ্য নয় কারণ এটি কোনও মডেল (সাধারণত) এর ব্যবহার এমভিসি লঙ্ঘন করে (এবং এটি আপনার ক্ষেত্রে মনে হয়)। আপনি ডেটা নিচ্ছেন এবং উপস্থাপনের জন্য এটি হেরফের করছেন। এটি, সংজ্ঞা অনুসারে, দৃষ্টিভঙ্গির সাথে সম্পর্কিত, মডেলটির নয়।
এখানে কিছু সমাধান রয়েছে:
মডেল এবং দর্শনের মধ্যস্থতা করতে উপস্থাপক বা দর্শন মডেল অবজেক্টটি ব্যবহার করুন। এটি প্রায় অন্যান্য সমাধানের তুলনায় প্রায় প্রাথমিক কাজ প্রয়োজন তবে এটি প্রায়শই একটি ভাল নকশা। উপস্থাপক / দর্শন-মডেলটিতে সহায়তাকারীরা এমভিসি লঙ্ঘন করে না, কারণ তারা দৃশ্যের স্তরটিতে বসবাস করে, traditionalতিহ্যবাহী কাস্টম রেল সহায়ক এবং যুক্তি-পূর্ণ ভিউগুলি প্রতিস্থাপন করে।
স্পষ্টভাবে include ActionView::Helpers::NumberHelperমধ্যে JobsHelperপাগল নেভিগেশন নির্ভর করে এর পরিবর্তে জাদুর এটা আপনার জন্য লোড করে। এটি এখনও দুর্দান্ত নয়, কারণ আপনার কোনও মডেল থেকে কোনও সহায়ককে অ্যাক্সেস করা উচিত নয়।
এমভিসি এবং এসআরপি লঙ্ঘন করুন । এটি কীভাবে করতে হয় তার জন্য ফুগিলেনের উত্তর দেখুন । আমি এটি এখানে প্রতিধ্বন করব না কারণ আমি এর সাথে একমত নই। এমনকি আরও তাই, যদিও, হিসাবে উপস্থাপনা পদ্ধতি আপনার মডেল দূষণ সঙ্গে আমি দ্বিমত পোষণ করি স্যাম উত্তর ।
আপনি যদি মনে করেন "তবে আমার মডেলটিতে আমার to_csv& to_pdfপদ্ধতিগুলি লেখার জন্য সত্যই আমার এটি প্রয়োজন !", তবে আপনার পুরো ভিত্তিটি ভুল all সর্বোপরি, আপনার কোনও to_htmlপদ্ধতি নেই, তাই না? এবং এখনও আপনার অবজেক্টটি প্রায়শই এইচটিএমএল হিসাবে রেন্ডার হয়। আপনার ডেটা মডেলটি সিএসভি কী তা জানার পরিবর্তে আপনার আউটপুট উত্পন্ন করার জন্য একটি নতুন শ্রেণি তৈরি করার কথা বিবেচনা করুন ( কারণ এটি হওয়া উচিত নয় )।
মডেল 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