Saya bertanya-tanya apa cara terbaik untuk menampilkan catatan unik dari has_many, melalui hubungan di Rails3.
Saya punya tiga model:
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
Katakanlah saya ingin mencantumkan semua produk yang dipesan pelanggan di halaman pertunjukan mereka.
Mereka mungkin telah memesan beberapa produk beberapa kali, jadi saya menggunakan counter_cache untuk menampilkan dalam urutan peringkat menurun, berdasarkan jumlah pesanan.
Tapi, jika mereka sudah memesan produk beberapa kali, saya perlu memastikan bahwa setiap produk hanya terdaftar satu kali.
@products = @user.products.ranked(:limit => 10).uniq!
berfungsi ketika ada beberapa catatan pesanan untuk suatu produk, tetapi menghasilkan kesalahan jika produk hanya dipesan sekali. (peringkat adalah fungsi pengurutan khusus yang ditentukan di tempat lain)
Alternatif lainnya adalah:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
Saya tidak yakin bahwa saya menggunakan pendekatan yang benar di sini.
Apakah ada orang lain yang menangani ini? Masalah apa yang Anda hadapi? Di mana saya dapat mengetahui lebih lanjut tentang perbedaan antara .unique! dan DISTINCT ()?
Apa cara terbaik untuk menghasilkan daftar catatan unik melalui has_many, through relationship?
Terima kasih