In meiner App können Benutzer Produkte so im Moment User has_many :products
und Product belongs_to :user
erstellen. Jetzt möchte ich, dass der Ersteller des Produkts product.user
andere Benutzer einladen kann, dem Produkt beizutreten, aber ich möchte, dass der Ersteller der einzige ist, der das Produkt bearbeiten kann.Schienen Join Tabelle Problem mit verschiedenen Rollen (Besitzer, Nicht-Besitzer)
Eines der Setups, die ich in meinem Kopf habe, ist dies, aber ich denke, es würde nicht funktionieren, da ich nicht weiß, wie zwischen erstellten und "beitreten-Einladung" -Produkten beim Aufruf user.products
zu unterscheiden .
User
has_many :products, through: :product_membership
has_many :product_memberships
has_many :products # this is the line I currently have but think it wouldn't
# work with the new setup
Product
has_many :users, through: :product_membership
has_many :product_memberships
belongs_to :user # I also have this currently but I'd keep the user_id on the product
# table so I could call product.user and get the creator.
ProductUsers
belongs_to :user
belongs_to :product
Invitation
belongs_to :product
belongs_to :sender, class: "User"
belongs_to :recipient, class: "User"
, um dieses Problem zu umgehen ich von 2 Lösungen denken kann:
die Linie
User has_many :products
Loswerden, dass ich zur Zeit und einfach eine Instanz Methode zumuser
Modell ergänzt:def owned_products Product.where("user_id = ?", self.id) end
Mein Problem damit, dass ich denke, dass es nicht der Konvention folgt.
Entfernen der
User has_many :products
Zeile, die ich derzeit habe und Hinzufügen einer booleschen Spalte zu den 'ProductUsers'is_owner?
genannt. Ich habe das vorher nicht versucht, also bin ich mir nicht sicher, wie das funktionieren würde.
Was ist die beste Lösung, um dieses Problem zu lösen? Wenn keine von diesen dann bitte lassen Sie mich wissen, was Sie empfehlen. Ich möchte später auf einige Probleme nicht eingehen, weil mein DB-Schema vermasselt ist.