Я надеюсь, что описание в заголовке достаточно пояснительно, но, чтобы уточнить детали, имея такие модели (списанные с моей головы, прошу прощения, если есть небольшие синтаксические ошибки и т. д.):
defmodule MyApp.Like do
use Ecto.Schema
import Ecto.Changeset
schema "likes" do
belongs_to :user, MyApp.User
belongs_to :comment, MyApp.Comment
timestamps()
end
end
defmodule MyApp.Comment do
use Ecto.Schema
import Ecto.Changeset
schema "comments" do
belongs_to :user, MyApp.User
has_many :likes, MyApp.Likes
timestamps()
end
end
defmodule MyApp.User do
use Ecto.Schema
import Ecto.Changeset
schema "users" do
has_many :comments, MyApp.Comment
has_many :likes, MyApp.Like
timestamps()
end
end
Теперь: я настроил все таким образом, чтобы можно было создавать лайки, без проблем. Но я не совсем понимаю, как ограничить пользователя, чтобы он / она мог иметь максимум один лайк за комментарий.
Если это может помочь кому-нибудь объяснить это мне, я исхожу из опыта работы с Rails и только начал изучать функциональные парадигмы Elixir / Phoenix.
Определите уникальный ключ (user_id, comment_id)
в таблице likes
на уровне базы данных.
Кстати, в Rails и в любой другой язык программирования / фреймворк, существующие в мире эта проблема решается одинаково.