So habe ich eine User
Selbstreferenzierung Verband als eine Möglichkeit für eine user
zu einem anderen user
... die typischen Followern/folgenden Modell implementiert. Ich bin verwirrt, wie man einen korrekten Abfrageausdruck für jede Funktion unten implementiert. Ich verstehe, was für jede Funktion zu tun ist, aber ich weiß nicht, wie ich sie umsetzen soll.Ecto Abfrage für selbstreferenzierende Assoziation
defmodule App.User do
schema "users" do
#...
has_many :followers, App.Follower, foreign_key: :followed_id
has_many :following, through: [:followers, :follower]
end
#...
@doc """
Return true if `user` is following `user2`
"""
def following?(user, user2) do
end
@doc """
Return true if `user` is followed by `user2`
"""
def followed_by?(user, user2) do
end
@doc """
`user` follows `user2`
"""
def follow(user, user2) do
end
@doc """
`user` unfollows `user2`
"""
def unfollow(user, user2) do
end
end
Das Follower
Schema:
schema "followers" do
belongs_to :followed, User
belongs_to :follower, User
timestamps()
end
'folgend?' Und 'folge_by?' Könnte man einfach in der Join-Tabelle nachsehen, ob der Datensatz da ist, oder? 'follow' könnte eine Repo.insert in die Join-Tabelle mit beiden IDs und" unfollow "entfernen einen solchen Datensatz tun. Sie sollten jeweils Einzeiler sein. – Johannes
Danke Johannes. Ich verstehe, was für jede Funktion zu tun ist, aber ich weiß nicht, wie ich sie umsetzen soll. Wenn das Sinn macht. –