আমি বিস্মিত হয়েছি, রেল 3-এর সম্পর্কের মধ্য দিয়ে একটি has_many থেকে অনন্য রেকর্ড প্রদর্শন করার সর্বোত্তম উপায় কী।
আমার কাছে তিনটি মডেল রয়েছে:
class User < ActiveRecord::Base
has_many :orders
has_many :products, :through => :orders
end
class Products < ActiveRecord::Base
has_many :orders
has_many :users, :through => :orders
end
class Order < ActiveRecord::Base
belongs_to :user, :counter_cache => true
belongs_to :product, :counter_cache => true
end
আসুন বলতে দিন যে কোনও গ্রাহক তাদের শো পৃষ্ঠায় আদেশ করেছেন এমন সমস্ত পণ্যকে আমি তালিকাবদ্ধ করতে চাই।
তারা কয়েকটি পণ্যকে একাধিকবার অর্ডার দিয়ে থাকতে পারে, সুতরাং আমি অর্ডার সংখ্যার ভিত্তিতে অবতরণ র্যাঙ্ক ক্রমে প্রদর্শন করতে কাউন্টার_ ক্যাশে ব্যবহার করছি।
তবে, যদি তারা একাধিকবার কোনও পণ্য অর্ডার করে থাকে তবে আমার নিশ্চিত করতে হবে যে প্রতিটি পণ্য কেবল একবারে তালিকাভুক্ত হয়েছে।
@products = @user.products.ranked(:limit => 10).uniq!
যখন কোনও পণ্যের জন্য একাধিক অর্ডার রেকর্ড রয়েছে তখন কাজ করে, তবে কোনও পণ্য কেবল একবার অর্ডার করা হলে ত্রুটি উত্পন্ন করে। (স্থান নির্ধারণ কাস্টম বাছাই ফাংশন অন্য কোথাও সংজ্ঞায়িত)
আর একটি বিকল্প হ'ল:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
আমি নিশ্চিত নই যে আমি এখানে সঠিক পন্থায় আছি।
অন্য কেউ এই মোকাবেলা করেছে? আপনি কোন বিষয়গুলির বিরুদ্ধে এসেছিলেন? ইউনিকের মধ্যে পার্থক্য সম্পর্কে আমি আরও কোথায় জানতে পারি! এবং DISTINCT ()?
সম্পর্কের মাধ্যমে has_many এর মাধ্যমে অনন্য রেকর্ডের একটি তালিকা তৈরি করার সর্বোত্তম উপায় কী?
ধন্যবাদ