2016-05-20 12 views
0

In meiner product_users gemeinsamen Tabelle gibt es neben den product_id und user_id eine Rollenspalte.rails4 scoped has_many association

Ich habe diese Zuordnung in meinem Produktmodell.

has_many :owners, -> { where(product_users: { role: "owner" }) }, 
        through: :product_users, source: :user 

Alle Produkte haben nur einen "Besitzer" und der Rest wird "Mitglied" sein. Welche Zuordnung sollte ich verwenden, um die owner des Produkts anstelle einer owners Sammlung zu erhalten. Also in den Ansichten möchte ich product.owner verwenden. Ich konnte nicht herausfinden, wie man has_one oder belongs_to benutzt.

Ich könnte diese Instanz-Methode verwenden, aber ich denke, es wäre besser, eine feine Assoziation irgendwie zu definieren.

Antwort

1

Ich denke, der einfachste Weg, das zu tun, wäre, eine Spalte "owner_id" zum Produkt hinzuzufügen. Dann wird auf dem Produkt:

belongs_to :owner 

und auf den Benutzer so etwas wie dieses

has_many :owned_products, class_name: "Product", foreign_key: "owner_id" 

Die „class_name“ erzählt die Vereinigung, die Sie für ein „Produkt“ und der foreign_key suchen wird, wird definiert, Welche Spalte wird verwendet, um mit der Benutzer-ID zu vergleichen.

Wenn Sie keine zusätzliche Spalte hinzufügen möchten, dann können Sie die Zuordnung zu "has_many: owner" benennen, aber das ist falsch auf so vielen Ebenen, dass Sie es nicht tun sollten. Wenn Sie also keine zusätzliche Spalte hinzufügen möchten, halten Sie sich an die Methode.

def owner 
    owners.first 
end 
Verwandte Themen