2016-10-02 7 views
1

In Rails, wie würde man bedingte Datensätze in einer has_many_through Beziehung verknüpfen? Beispiel:Bedingt speichern has_many_through Beziehungen

Angenommen, ich wollte eine Terminreferenz haben, genau zwei Ärzte. Das heißt, es wird keine Terminaufzeichnung geben, da weniger als zwei Ärzte zugewiesen sind. Wie aber könnte dieser Termin dann auf jeden Arzt Bezug nehmen?

Beispiel

Grundsätzlich möchte ich Spur von Benutzern halten zwischen ihnen mögen anderen Nutzern und gegenseitige Gleichen. Eine Verbindung wird hergestellt, wenn sich beide Benutzer gegenseitig mögen. Aber ich möchte keine Verbindung, wenn nur ein Benutzer einen anderen mag, aber nicht reziprok.

Wenn Benutzer A Benutzer B mag. Ein "Gefällt mir" wird erstellt. Wenn Benutzer B Benutzer A mag. Ein "Gefällt mir" wird erstellt. Eine "Verbindung" wird ebenfalls erstellt.

sollte die Verbindung der Lage zu nennen: user.likes user.connections

Das Problem, das ich habe, ist, wie diese Beziehung Tabelle es, wenn wissen kann: connection.users

Der Benutzer anrufen Lage sein sollte, ist gegenseitig?

+0

Können Sie etwas Beispiel teilen? –

+0

Ich fügte mehr Erklärung hinzu. – user3162553

+0

@ user3162553 Ein bestimmter 'user' kann viele' like's haben, aber kann ein bestimmtes 'like' viele' users' haben? Es scheint, dass die Beziehung, die du versuchst, nicht viele zu viele ist. – LucasP

Antwort

0

Für die ursprüngliche Frage, ein connection macht keinen Unterschied zwischen den beiden Benutzern, so würde ich es als one to many Beziehung modellieren und validieren, es hat nur zwei Benutzer.

Ein ähnliches hat zwei Benutzer, die liker (Geber der dergleichen) und die likee (Empfänger der dergleichen). Jedes Mal, wenn Sie ein neues like erstellen, sollten Sie überprüfen, ob die likee auch die liker gefällt. If likee.likes.where(likee: liker)? Wenn ja, erstellen Sie die neue Verbindung mit beiden Benutzern.

class User < ApplicationRecord 
    has_many :likes 
    has_many :connections 
end 

class Like < ApplicationRecord 
    belongs_to :user, :foreign_key => 'liker_id' 
    belongs_to :user, :foreign_key => 'likee_id' 
end 

class Connection < ApplicationRecord 
    has_many :likes 
    has_many :users, through: likes 
end 

Ich möchte hinzufügen, dass ich nicht 100% sicher bin, da ich derzeit selbst Rails lernen bin. Aber das ist, was ich gefunden habe und hoffentlich ist es nützlich (und korrekt).

+0

Super - das ist großartig! Eine Sache, die ich hinzugefügt habe, war 'optional: true' für die Verbindungsassoziation, so dass diese speichern kann, ohne dass sie gesetzt werden muss. – user3162553

Verwandte Themen