elixir - 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 的功能范式。
解决方案
在数据库级别(user_id, comment_id)
的表中定义唯一键。likes
顺便说一句,在 Rails 和世界上任何其他编程语言/框架中,这个问题正在以同样的方式解决。
推荐阅读
- reactjs - 如何使用 redux-saga 在 API 响应中检查过期的 JWT 令牌?
- apache - 为什么 nifi 1.10 中没有“PutDruidRecord”处理器
- npm - Npm 审计报告说“1 个漏洞需要人工审查并且无法更新”/.Node js
- c++ - For-loop 或 std::any_of,我应该使用哪一个?
- mysql - PHP+MySQL上的仓库管理系统
- r - 为什么我在 R 的预测 arima 中得到重复的日期?
- google-apps-script - 如何使用谷歌脚本插入多个单元格(不是整行/列)?
- text - 如何使用 Notepad++ 去除所有引号并重新添加到文本制表符分隔的文件中
- android - 使用 Flutter 收听通知
- firebase - 从 firebase/firestore 集合中获取 lat/long 坐标