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

  • dope2111

    dope2111

    29 HAZİRAN 2009
  • Make:

    Make:

    23 Mart 2006
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006