Model.pluck(:id)
রিটার্ন ধরে নিচ্ছি [1,2,3,4]
এবং আপনি অর্ডার চান[2,4,1,3]
ধারণাটি হ'ল ORDER BY CASE WHEN
এসকিউএল ধারাটি ব্যবহার করা । উদাহরণ স্বরূপ:
SELECT * FROM colors
ORDER BY
CASE
WHEN code='blue' THEN 1
WHEN code='yellow' THEN 2
WHEN code='green' THEN 3
WHEN code='red' THEN 4
ELSE 5
END, name;
রেলগুলিতে, আপনি একই মডেলটিতে একটি অনুরূপ কাঠামো তৈরির জন্য সর্বজনীন পদ্ধতি ব্যবহার করে এটি অর্জন করতে পারেন:
def self.order_by_ids(ids)
if ids.present?
order_by = ["CASE"]
ids.each_with_index do |id, index|
order_by << "WHEN id='#{id}' THEN #{index}"
end
order_by << "END"
order(order_by.join(" "))
end
else
all
end
তারপরে:
ordered_by_ids = [2,4,1,3]
results = Model.where(id: ordered_by_ids).order_by_ids(ordered_by_ids)
results.class
এই সম্পর্কে ভাল জিনিস। ফলাফল ActiveRecord সম্পর্ক যেমন ফিরে হয় (যার ফলে আপনার মত পদ্ধতি ব্যবহার করতে last
, count
, where
, pluck
, ইত্যাদি)