ruby on rails - অ্যারে Rails অ্যাক্টিভেশন ছাড়া ActiveRecord যেখানে আইডি নির্বাচন করুন




ruby-on-rails find (4)

যখন আমি আইড এর অ্যারে আছে, মত

ids = [2,3,5]

এবং আমি সঞ্চালন

Comment.find(ids)

সবকিছু জরিমানা কাজ করে। কিন্তু যখন এমন আইডি থাকে যেটি অস্তিত্ব না থাকে, তখন আমার ব্যতিক্রম হয়। যখন আমি আইডিগুলির তালিকা পেতে পারি যা কিছু ফিল্টারের সাথে মেলে এবং আমি এমন কিছু করি তবে এটি সাধারণভাবে ঘটে

current_user.comments.find(ids)

এই সময় আমার কাছে একটি বৈধ মন্তব্য আইডি থাকতে পারে, যা যদিও প্রদত্ত ব্যবহারকারীর নয়, তাই এটি পাওয়া যায় না এবং আমি ব্যতিক্রমও পাই।

আমি find(:all, ids) করার চেষ্টা করেছি find(:all, ids) , কিন্তু এটি সব রেকর্ড ফেরত।

একমাত্র উপায় আমি এখন এটা করতে পারেন

current_user.comments.select { |c| ids.include?(c.id) }

কিন্তু যে আমার সুপার অকার্যকর সমাধান মত মনে হয়।

অ-বিদ্যমান রেকর্ডে ব্যতিক্রম ছাড়াই আইরে আইডি নির্বাচন করার আরও ভাল উপায় আছে?


আপনার অ্যাপটি হত্যাকাণ্ডের ব্যতিক্রমগুলি এড়ানোর জন্য আপনাকে সেই ব্যতিক্রমগুলি ধরতে হবে এবং আপনার ইচ্ছার সাথে তাদের আচরণ করা উচিত, আইডিটির জন্য এমন আচরণের সংজ্ঞা নির্ধারণ করা যেখানে আইডি পাওয়া যায় না।

begin
  current_user.comments.find(ids)
rescue
  #do something in case of exception found
end

এখানে Ruby ব্যতিক্রম ব্যতিক্রম আরও তথ্য


আপনি যদি অন্য কোনও শর্ত আরোপ করতে চান তবে আপনি name_scope এ এটি ব্যবহার করতে পারেন

উদাহরণস্বরূপ কিছু অন্যান্য মডেল অন্তর্ভুক্ত করুন:

নাম_স্কোপ 'get_by_ids', lambda {| id | {: অন্তর্ভুক্ত => [: মন্তব্য],: শর্ত => ["comments.id IN (?)", ids]}}


যদি আপনার আরো নিয়ন্ত্রণের দরকার হয় (সম্ভবত আপনি টেবিলের নামটি উল্লেখ করতে চান) তবে আপনি নিম্নলিখিতগুলিও করতে পারেন:

Model.joins(:another_model_table_name)
  .where('another_model_table_name.id IN (?)', your_id_array)

যদি এটি কেবল ব্যতিক্রমটি এড়িয়ে চলতে থাকে তবে আপনি "উদ্বিগ্ন_এল_বি .." ফাংশনের পরিবার ব্যতিক্রম ছাড়াই কাজ করে।

Comment.find_all_by_id([2, 3, 5])

আইডির কিছু উপস্থিত থাকলেও কাজ করবে। এই কাজ করে

user.comments.find_all_by_id(potentially_nonexistent_ids)

পাশাপাশি মামলা।

আপডেট: রেল 4

Comment.where(id: [2, 3, 5])




find