has_many - 给定范围限制为一个(例如,给定评论的每个用户 1 个赞)
has_many - limit to just one for a given scope (e.g. 1 like per user for a given comment)
我希望标题中的描述足够解释,但要详细说明一点,有这样的模型(我脑子里写的,如果有任何轻微的语法错误等,请原谅):
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
现在:我已将所有内容设置为可以创建喜欢的方式,没问题。但我不太清楚如何限制用户,因此 he/she 每条评论最多只能有一个赞。
如果这可以帮助任何人向我解释,我来自 Rails 背景并且才开始探索 Elixir/Phoenix 的功能范例。
在数据库级别 likes
table 中定义唯一键 (user_id, comment_id)
。
顺便说一句,在Rails和世界上存在的任何其他编程语言/框架中,这个问题正在以同样的方式解决。
我希望标题中的描述足够解释,但要详细说明一点,有这样的模型(我脑子里写的,如果有任何轻微的语法错误等,请原谅):
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
现在:我已将所有内容设置为可以创建喜欢的方式,没问题。但我不太清楚如何限制用户,因此 he/she 每条评论最多只能有一个赞。
如果这可以帮助任何人向我解释,我来自 Rails 背景并且才开始探索 Elixir/Phoenix 的功能范例。
在数据库级别 likes
table 中定义唯一键 (user_id, comment_id)
。
顺便说一句,在Rails和世界上存在的任何其他编程语言/框架中,这个问题正在以同样的方式解决。