আমার কাছে একটি অ্যারে অবজেক্ট রয়েছে, আসুন এটির নাম দিন Indicator
। আমি def self.subjects
এই অ্যারেতে সূচক শ্রেণির পদ্ধতিগুলি ( বিভিন্ন, স্কোপ ইত্যাদি) চালাতে চাই । গ্রুপের অবজেক্টগুলিতে ক্লাসের পদ্ধতিগুলি চালানোর জন্য আমি কেবল একটাই উপায় তাদের অ্যাক্টিভেকর্ড :: রিলেশন হতে পারি। সুতরাং আমি একটি to_indicators
পদ্ধতি যোগ করার অবলম্বন শেষ Array
।
def to_indicators
# TODO: Make this less terrible.
Indicator.where id: self.pluck(:id)
end
ক্লাস পদ্ধতিতে ফলাফলগুলি ফিল্টার করার জন্য আমি মাঝে মাঝে বেশ কয়েকটি স্কোপগুলিকে শৃঙ্খলিত করি। সুতরাং, যদিও আমি একটি অ্যাক্টিভেকর্ড :: রিলেশন কোনও পদ্ধতিতে কল করি, আমি জানি না কীভাবে সেই বস্তুটি অ্যাক্সেস করতে হয়। আমি কেবল এটির বিষয়বস্তু পেতে পারি all
। তবে all
একটি অ্যারে। সুতরাং আমি যে অ্যারে একটি অ্যাক্টিভেকর্ড :: রিলেশন রূপান্তর করতে হবে। উদাহরণস্বরূপ, এটি একটি পদ্ধতির একটি অংশ:
all.to_indicators.applicable_for_bank(id).each do |indicator|
total += indicator.residual_risk_for(id)
indicator_count += 1 if indicator.completed_by?(id)
end
আমি অনুমান করি যে এই কনডেন্সগুলি দুটি প্রশ্নে নেমে এসেছে।
- কীভাবে আমি অবজেক্টের অ্যারেটিকে একটি অ্যাক্টিভেকর্ড :: রিলেশনে রূপান্তর করতে পারি? সাধারণত
where
প্রতিটি সময় না করে। def self.subjects
অ্যাক্টিভেকর্ড :: সম্পর্কিত ক্ষেত্রে কোনও ধরণের পদ্ধতি চালানোর সময় , আমি কীভাবে সেই অ্যাক্টিভেকর্ড :: সম্পর্কিত অবজেক্টটি অ্যাক্সেস করব?
ধন্যবাদ আমার যদি কিছু পরিষ্কার করার দরকার হয় তবে আমাকে জানান।
.all
করার.scoped
মতো ব্যবহার করুন (যদিও রেল 4 এ এটি কাজ করবে.all
)। নিজেকে যদি কোনও সম্পর্কের জন্য কোনও অ্যারে পরিণত করার প্রয়োজন মনে হয় আপনি কোথাও ভুল হয়ে গেছেন ...