Ich frage mich, wie ich eindeutige Datensätze aus has_many über eine Beziehung in Rails3 am besten anzeigen kann.
Ich habe drei Modelle:
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
Nehmen wir an, ich möchte alle Produkte, die ein Kunde bestellt hat, auf seiner Ausstellungsseite auflisten.
Möglicherweise haben sie einige Produkte mehrmals bestellt, daher verwende ich counter_cache, um sie in absteigender Reihenfolge anzuzeigen, basierend auf der Anzahl der Bestellungen.
Wenn sie jedoch ein Produkt mehrmals bestellt haben, muss ich sicherstellen, dass jedes Produkt nur einmal aufgeführt wird.
@products = @user.products.ranked(:limit => 10).uniq!
Funktioniert, wenn für ein Produkt mehrere Bestelldatensätze vorhanden sind, generiert jedoch einen Fehler, wenn ein Produkt nur einmal bestellt wurde. (Rang ist die an anderer Stelle definierte benutzerdefinierte Sortierfunktion)
Eine andere Alternative ist:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
Ich bin nicht sicher, ob ich hier auf dem richtigen Weg bin.
Hat jemand anderes das angegangen? Auf welche Probleme sind Sie gestoßen? Wo kann ich mehr über den Unterschied zwischen .unique erfahren? und DISTINCT ()?
Was ist der beste Weg, um eine Liste eindeutiger Datensätze über eine has_many-Beziehung zu generieren?
Vielen Dank