Ecto request for self-regulation

So, I implemented the self-referencing association Useras a way to Userfollow another User... typical followers / next model. I am confused about how to implement the correct query expression for each function below. I understand what needs to be done for each function, but I don’t know how to implement them.

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

Scheme Follower:

schema "followers" do
  belongs_to :followed, User
  belongs_to :follower, User

  timestamps()
end
+4
source share
2 answers

I'm new to Elixir, but I will probably need this in the future, so I looked at that. I would try;

def following?(user, user2) do
  user = Repo.get(User, user) |> Repo.preload(:followers)
  followers = hd(user.followers)
  Enum.any?(followers, fn e -> e == user2 end)
end

, , - . . , .

0

, . - :

def follow(user, user2) do
  Repo.insert! %Follower{follower: user2, followed: user}
end

def following?(user, user2) do
  !! Repo.get_by(Follower, [follower: user2, followed: user]) # !! so that it returns true or false. You can also write xy != nil.
end

Ecto.Repo, .: -)

0

Source: https://habr.com/ru/post/1660136/


All Articles