首页 > 解决方案 > has_many - 给定范围限制为一个(例如,给定评论的每个用户 1 个赞)

问题描述

我希望标题中的描述足够解释性,但要详细说明,有这样的模型(写在我的头上,如果有任何轻微的语法错误等,请原谅):

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 的功能范式。

标签: elixirphoenix-frameworkecto

解决方案


在数据库级别(user_id, comment_id)的表中定义唯一键。likes

顺便说一句,在 Rails 和世界上任何其他编程语言/框架中,这个问题正在以同样的方式解决。


推荐阅读