SORU
1 Mayıs 2011, Pazar


Nasıl ilişki yoluyla bir has_many benzersiz kayıtları görüntülemek için?

Rails3 içinde has_many, üzerinden bir ilişki benzersiz kayıtları görüntülemek için en iyi yolu nedir merak ediyorum.

Üç model var:

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

Tüm ürünleri bir müşteri listesini istiyorum diyelim Haritayı kendi sayfasında emretti.

Bazı ürünler birden fazla kez sipariş etmiş olabilirler, emir sayısına göre azalan sıralı olarak görüntülemek için counter_cache kullanıyorum.

Ama, eğer bir ürün birden çok kez sipariş varsa, her bir ürün sadece bir kez listelenir emin olmak istiyorum.

@products = @user.products.ranked(:limit => 10).uniq!

birden fazla var çalışır bir ürün için Sipariş kayıtları, ama eğer bir ürün sadece bir kez sipariş edilmiştir eğer bir hata oluşturur. (sırada özel bir sıralama işlevi başka bir yerde tanımlanır)

Başka bir alternatif

@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")

Doğru bir yaklaşım için buradayım emin değilim.

Herkesten bu ele mi? Ne sorunları karşı geldi? Nerede arasındaki fark hakkında daha fazla bilgi bulabilirim .benzersiz! () FARKLI?

Has_many, üzerinden bir ilişki ile benzersiz kayıtların bir listesini oluşturmak için en iyi yolu nedir?

Teşekkürler

CEVAP
1 Mayıs 2011, Pazar


Belirtmek için denediniz mi :has_many Derneği seçeneği özgün:

has_many :products, :through => :orders, :uniq => true

the Rails documentation:

:uniq

Eğer doğruysa, çiftleri toplama görünmeyecektir. Birlikte yararlı olan :.

RAYLAR İÇİN GÜNCELLEME 4:

Raylar 4 has_many :products, :through => :orders, :uniq => true önerilmiyor. Bunun yerine, şimdi has_many :products, -> { distinct }, through: :orders yazmanız gerekmektedir. Daha fazla bilgi için distinct section for has_many: :through relationships on the ActiveRecord Associations documentation bkz. Kurt sayesinde zleri bu işaret için Mueller.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • David Tedeyev

    David Tedeye

    20 AĞUSTOS 2011
  • TechShowsYou

    TechShowsYou

    3 Mart 2011